【问题标题】:Specify character encoding of a dependency POM XML指定依赖项 POM XML 的字符编码
【发布时间】:2018-01-18 19:17:15
【问题描述】:

问题

运行gradle jar 时,我收到以下错误消息。

FAILURE: Build failed with an exception.

* What went wrong:
Could not resolve all files for configuration ':compileClasspath'.
> Could not resolve javax.units:jsr108:0.01.
  Required by:
      project : > org.geotools:gt2-metadata:2.5-M1
      project : > org.geotools:gt2-metadata:2.5-M1 > org.opengis:geoapi-nogenerics:2.1-M8
   > Could not resolve javax.units:jsr108:0.01.
      > Could not parse POM http://download.osgeo.org/webdav/geotools/javax/units/jsr108/0.01/jsr108-0.01.pom
         > Invalid byte 2 of 3-byte UTF-8 sequence.

我已经用 Gradle 4.1(当前最新)和 Gradle 3.2.1 对此进行了测试,结果相同。

确实,查看错误中URL处的POM文件,可以看出那个文件的编码是Windows-1252,而不是UTF-8为什么发生错误很清楚,但是我该如何解决它?我无法控制 POM 文件的字符编码。 如何告诉 Gradle 非 UTF-8 编码?

重现这个问题

这是一个重现错误的最小项目。

build.gradle

apply plugin: 'java'

repositories {
    maven {
        url 'http://download.osgeo.org/webdav/geotools'
    }
}

dependencies {
    // https://mvnrepository.com/artifact/org.geotools/gt2-metadata
    compile group: 'org.geotools', name: 'gt2-metadata', version: '2.5-M1'                                                                                                                                        
}

src/main/java/HelloWorld.java

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

其他信息

$ gradle -v

------------------------------------------------------------
Gradle 4.1
------------------------------------------------------------

Build time:   2017-08-07 14:38:48 UTC
Revision:     941559e020f6c357ebb08d5c67acdb858a3defc2

Groovy:       2.4.11
Ant:          Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM:          1.8.0_141 (Oracle Corporation 25.141-b15)
OS:           Linux 4.11.0-2-amd64 amd64

$ java -version
openjdk version "1.8.0_141"
OpenJDK Runtime Environment (build 1.8.0_141-8u141-b15-3-b15)
OpenJDK 64-Bit Server VM (build 25.141-b15, mixed mode)

【问题讨论】:

    标签: gradle encoding pom.xml


    【解决方案1】:

    另一种可能性是手动下载 JAR 并将项目配置为使用该引用运行。错误似乎是下载过程的一部分,如果您绕过该过程,源将编译并运行。

    mvnrepository.com有下载链接。

    您可以将 JAR 安装到 Maven 本地存储库中

    /home/you/.m2/repository/org/geotools/gt2-metadata/2.5-M1/gt2-metadata-2.5-M1.jar
    

    您可以通过没有依赖项、运行gradle jar 并查看错误消息来找到此路径。在下面,以file: 开头的第二行是您要安装JAR 的路径。

    * What went wrong:
    Could not resolve all files for configuration ':compileClasspath'.
    > Could not find org.geotools:gt2-metadata:2.5-M1.
      Searched in the following locations:
          file:/home/you/.m2/repository/org/geotools/gt2-metadata/2.5-M1/gt2-metadata-2.5-M1.pom
          file:/home/you/.m2/repository/org/geotools/gt2-metadata/2.5-M1/gt2-metadata-2.5-M1.jar
          https://repo1.maven.org/maven2/org/geotools/gt2-metadata/2.5-M1/gt2-metadata-2.5-M1.pom
          https://repo1.maven.org/maven2/org/geotools/gt2-metadata/2.5-M1/gt2-metadata-2.5-M1.jar
      Required by:
          project :
    

    这是我的build.gradle 文件:

    apply plugin: 'java'
    
    apply plugin: 'application'
    
    mainClassName = 'hello.HelloWorld'
    
    repositories {
        mavenLocal()
        mavenCentral()
    }
    
    dependencies {
        // https://mvnrepository.com/artifact/org.geotools/gt2-metadata
        compile group: 'org.geotools', name: 'gt2-metadata', version: '2.5-M1'
    }
    

    【讨论】:

      【解决方案2】:

      很抱歉,我认为没有办法做到这一点,我尝试修改 gradle 依赖项的配置,但似乎没有办法混合编码。

      Gradle 直接从 JVM 派生它的字符编码,并且似乎没有办法指定具有不同编码的依赖项。该依赖项的问题还在于它明确指出编码是 UTF-8,但随后文件已写入 Windows-1252 ..

      你可以在你的

      JAVA_OPTS=-Dfile.encoding=Windows-1252 
      

      这应该在 Windows-1252 中解析您的 .gradle 文件和依赖项......如果您尝试使用不依赖于 jsr 库的 g2-Metadata 库版本失败。

      如果你知道你不会使用 jsr 库中的任何东西,那么像这样定义它:

      compile (group: 'org.geotools', name: 'gt2-metadata', version: '2.5-M1') {
          exclude module: "jsr108"
      }
      

      【讨论】:

        猜你喜欢
        • 2016-09-12
        • 1970-01-01
        • 2012-05-25
        • 2022-12-06
        • 2011-08-30
        • 1970-01-01
        • 2010-11-01
        • 1970-01-01
        相关资源
        最近更新 更多