Gradle не может скопировать файл png в java project

#java #spring #gradle

#java #spring #gradle

Вопрос:

итак, я добавил png img в свои ресурсы, так как я хочу использовать его в своем проекте.
Но Gradle, похоже, больше не позволяет мне создавать проект, он выдает следующую ошибку:

 * What went wrong:
Execution failed for task ':processResources'.
> Could not copy file 'C:workspaceJavaUtilitiesEmailServicesrcmainresourcesimgwatermark.png' to 'C:workspaceJavaUtilitiesEmailServicebuildresourcesmainimgwatermark.png'.
  

Важной частью Stacktrace является:

 Caused by: groovy.lang.GroovyRuntimeException: Failed to parse template script (your template may contain an error or be trying to use expressions not currently supported): startup failed:
SimpleTemplateScript28.groovy: 4: illegal string body character after dollar sign;
   solution: either escape a literal dollar sign "$5" or bracket the value expression "${5}" @ line 4, column 99.
   o¿dHÌIDATx^Ý?╝$Eı┼Ù¥Ö┘]r♫↕$-↓$g%(êê
                                 ^
  

Моя настройка проекта:
Изображение настройки файла

build.gradle:

 import java.text.SimpleDateFormat
import org.apache.tools.ant.filters.ReplaceTokens
buildscript {
    ext {
        springBootVersion = '2.1.5.RELEASE'
        set('springCloudVersion', 'Greenwich.RELEASE')
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}
plugins {
    id 'com.palantir.git-version' version '0.11.0'
}
def appName = 'EmailService'
version = '1.1.5'
group = 'dk.xx.email'
if (!hasProperty('mainClass')) {
    ext.mainClass = 'dk.xx.email.EmailApplication'
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'maven-publish'
apply plugin: 'com.palantir.git-version'

sourceCompatibility = 1.8

repositories {
    maven {
        credentials {
            username XXX
            password XXXXXXX
        }
        url 'http://maven01.local:8080/repository/XX/'
    }
    mavenCentral()
    maven { url 'https://jitpack.io' }
}
bootJar {
    baseName = "${appName}"
    version =  "${version}"
}
dependencies {
    compile('net.sf.jt400:jt400:9.5:jt400_jdk8')
    compile('org.springframework.boot:spring-boot-starter-data-jpa')
    compile('org.springframework.boot:spring-boot-starter-data-rest')
    compile('org.springframework.boot:spring-boot-starter-actuator')
    compile group: 'org.springframework', name: 'spring-mock', version: '2.0.8'
    compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-netflix-eureka-client', version: '2.1.0.RELEASE'
    compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-openfeign', version: '2.1.0.RELEASE'
    compile group: 'xx', name: 'NhoData-Entities', version: '0.1.99'
    compile group: 'xx', name: 'xx-Entities', version: '2.1.7'
    compile('dk.xx.stakeholder.document.archive:DocumentArchive:1.1.10:proxy')
    compile group: 'com.itextpdf', name: 'itext7-core', version: '7.0.4'
    compile('dk.xx.gui.start:EngagementGui:1.2.2:proxy')
    compileOnly("org.projectlombok:lombok:1.18.6")
    annotationProcessor group: 'org.springframework.boot', name: 'spring-boot-configuration-processor'
    annotationProcessor 'org.projectlombok:lombok:1.18.6'
    testCompile('org.springframework.boot:spring-boot-starter-test')
    compile('org.springframework.boot:spring-boot-starter-mail')
    compile('org.springframework.boot:spring-boot-starter-thymeleaf')

    // Auto-produce swagger
    compile group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2'
    compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2'

}

task versionTxt()  {
    doLast {
        def versionFile = new File("$projectDir/.ci/version.txt");
        versionFile.getParentFile().mkdir();
        versionFile.text = """
            Version=$version
            BuildTime=${new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").format(new Date())}
            ApplicationName=${appName}
        """
    }
}
def dependencyName = "${appName}-proxy-${version}"
task tJar(type: Jar, dependsOn: compileJava) {
    archiveName = "${dependencyName}.jar"
    classifier = 'proxy'
    from(sourceSets.main.output) {
        includeEmptyDirs=false
        include '**/feign/*'
        include '**/domain/*'
        include '**/entities/*'
    }
}
task sourcesJar(type: Jar) {
    classifier = 'sources'
    from sourceSets.main.allJava
}
publishing {
    publications {
        maven(MavenPublication) {
            artifacts {
                groupId "${group}"
                artifactId "${appName}"
                version "${version}"
            }
            artifact tJar
            artifact sourcesJar
        }
        repositories.maven {
            url 'http://maven01.local:8080/repository/xx/'
            credentials {
                username xx
                password xxxxxxxx
            }
        }
    }
}

processResources {
    filter(ReplaceTokens, tokens:[gitVersion: gitVersion()])
    expand(project.properties)
}
static def buildTime() {
    final dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
    dateFormat.timeZone = TimeZone.getTimeZone('UTC')
    dateFormat.format(new Date())
}
springBoot {
    // This statement tells the Gradle Spring Boot plugin to generate a file
    // build/resources/main/META-INF/build-info.properties
    // that is picked up by Spring Boot to display via /actuator/info endpoint.
    buildInfo {
        // Generate extra build info.
        properties {
            def details = versionDetails()
            additional = [
                by                   : System.properties['user.name'],
                time                 : buildTime(),
                operatingSystem      : "${System.properties['os.name']} (${System.properties['os.version']})",
                machine              : InetAddress.localHost.hostName,
                ci_enabled           : System.getenv('CI') ? true : false,
                ci_buildNumber       : System.env.'BUILD_NUMBER' ?: 'UNKNOWN',
                ci_jobName           : System.env.'JOB_NAME' ?: 'UNKNOWN',
                appVersion           : version
            ]
        }
    }
}
  

Комментарии:

1. Похоже, что это копия текстового файла с переменным расширением. Вам нужна двоичная копия для изображений.

2. Это действительно должно работать из коробки. Есть ли у вас что-нибудь, чем стоит поделиться в вашем файле build.gradle? В нем должно быть что-то плохое.

3. Ха, хорошо. Это filter утверждение в вашей processResources конфигурации. Вы просите Gradle заменить текст внутри PNG, но он не может понять смысл текста в PNG (это потому, что в нем нет текста).

4. @barfuin Спасибо, можете ли вы отправить ответ, пожалуйста, чтобы я мог его принять?

5. @AndersMetnik делал это в течение 9 лет — много интересных задач 🙂

Ответ №1:

Я думаю, что это filter утверждение в вашей processResources конфигурации. Вы просите Gradle заменить текст внутри PNG, но он не может понять смысл текста в PNG (это потому, что в нем нет текста; вероятно, не соответствует какой-либо разумной кодировке символов).