指定依赖项POM XML

时间:2017-08-10 13:39:47

标签: gradle encoding pom.xml

问题

运行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)

2 个答案:

答案 0 :(得分:1)

我很遗憾地说我不认为有办法做到这一点,我试图修改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"
}

答案 1 :(得分: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'
}