Gradle 无法解析 sikulixapi
Gradle Unable to resolve sikulixapi
我正在尝试将我的项目从 Maven 更改为 Gradle,但我遇到了一些依赖项问题。
这是我的 build.gradle 文件:
plugins {
id 'java'
}
group 'de.myurl.test'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
jcenter()
maven {
url 'https://repo.spring.io/snapshot/'
}
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile group: 'jxgrabkey', name: 'jxgrabkey', version: '1.0'
compile 'org.seleniumhq.selenium:selenium-server:3.9.1'
compile 'net.java.dev.jna:jna-platform:4.0.0'
compile 'log4j:log4j:1.2.17'
compile 'com.sikulix:sikulixapi:1.1.0'
compile 'net.java.dev.jna:jna:5.4.0'
compile 'com.relevantcodes:extentreports:2.41.0'
compile 'commons-io:commons-io:2.6'
compile 'javax.activation:activation:1.1.1'
compile 'com.sun.xml.ws:policy:2.3.1'
compile 'com.sun.jmx:jmxri:1.2.1'
compile 'javax.mail:mail:1.4'
compile 'com.uttesh:pdfngreport:2.1.3'
compile 'org.uncommons:reportng:1.1.4'
compile 'org.testng:testng:7.0.0'
}
这是依赖项的问题:
我也试过用其他版本的sikuli,但也没用。
有没有可能这个问题和我的项目结构有关?
非常感谢任何帮助:)
尝试添加额外的 Maven 存储库:
repositories {
jcenter()
mavenCentral()
maven {
url 'https://repo.spring.io/snapshot/'
}
}
并为 sikuli 添加分组
dependencies {
compile group: 'org.sikuli', name: 'sikuli-api', version: '1.1.0'
}
Maven还有一个id需要转换:
<dependencies>
<dependency>
<groupId>testName</groupId>
<artifactId>testName</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
将转换为 Gradle 并使用此表示法:
dependencies {
implementation 'testName:testName:1.1.1'
}
也尝试使用 implementation 而不是 compile。 在 2018 年之后是不推荐使用的语法。
如果此更改未能成功构建,请尝试使用 api 作为声明,而不是 实现 。
前任。 api 'com.sikulix:sikulixapi:1.1.0'
毕竟如果适用,更新库是一个不错的选择。
希望对你有帮助!
如您在屏幕截图中所示,Gradle 尝试解析名为 com.sikulix:${sikulix.libs}:1.1.0
的依赖项。当然,这里有一个名为 ${sikulix.libs}
的占位符尚未被替换。
占位符实际上是在 pom file for sikuli 中的 Maven 配置文件中定义的。相关部分如下:
<profiles>
<profile>
<id>Windows</id>
<activation>
<os>
<family>windows</family>
</os>
</activation>
<properties>
<sikulix.libs>sikulixlibswin</sikulix.libs>
</properties>
</profile>
<profile>
<id>Unix</id>
<activation>
<os>
<family>unix</family>
</os>
</activation>
<properties>
<sikulix.libs>sikulixlibslux</sikulix.libs>
</properties>
</profile>
<profile>
<id>Mac</id>
<activation>
<os>
<family>mac</family>
</os>
</activation>
<properties>
<sikulix.libs>sikulixlibsmac</sikulix.libs>
</properties>
</profile>
</profiles>
<!-- ... -->
<dependency>
<groupId>com.sikulix</groupId>
<artifactId>${sikulix.libs}</artifactId>
<version>${project.version}</version>
</dependency>
不幸的是,Gradle 不支持 Maven 配置文件,因此您必须自己创建一个替换规则来修复它。你可以这样做:
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
if (details.requested.name == '${sikulix.libs}') {
def os = org.gradle.internal.os.OperatingSystem.current()
def targetName
if (os.isWindows()) {
targetName = 'sikulixlibswin'
} else if (os.isUnix()) {
targetName = 'sikulixlibslux'
} else if (os.isMacOsX()) {
targetName = 'sikulixlibsmac'
} else {
throw new GradleException("Unknow operating system for determining the sikulix distribution")
}
details.useTarget group: details.requested.group, name: targetName, version: details.requested.version
details.because 'The Maven dependency is relying on profiles to select the correct module name for the current operating system'
}
}
}
如果您使用的是 1.1.0 版,您可能还必须为名为 jxgrabkey
的传递依赖项之一定义一个额外的 Maven 存储库。这个存储库也在 pom 中定义,但不会被 Gradle 自动使用。您可以这样添加:
repositories {
maven {
url = 'http://mvn.is.inf.uni-due.de:8081/nexus/content/repositories/atunes-dependencies/'
}
}
但是如果你升级到最新的1.1.1,就没有这个必要了。
这种方式适合我
dependencies {
...
compile files('sikulifolder/sikulixapi.jar')
...
}
sikulifolder - 是我的项目目录中带有 jar 的文件夹。
并且不要忘记依赖顺序很重要。
例如,我将它设置在最后一个 selenium 依赖项之前。
我正在尝试将我的项目从 Maven 更改为 Gradle,但我遇到了一些依赖项问题。
这是我的 build.gradle 文件:
plugins {
id 'java'
}
group 'de.myurl.test'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
jcenter()
maven {
url 'https://repo.spring.io/snapshot/'
}
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile group: 'jxgrabkey', name: 'jxgrabkey', version: '1.0'
compile 'org.seleniumhq.selenium:selenium-server:3.9.1'
compile 'net.java.dev.jna:jna-platform:4.0.0'
compile 'log4j:log4j:1.2.17'
compile 'com.sikulix:sikulixapi:1.1.0'
compile 'net.java.dev.jna:jna:5.4.0'
compile 'com.relevantcodes:extentreports:2.41.0'
compile 'commons-io:commons-io:2.6'
compile 'javax.activation:activation:1.1.1'
compile 'com.sun.xml.ws:policy:2.3.1'
compile 'com.sun.jmx:jmxri:1.2.1'
compile 'javax.mail:mail:1.4'
compile 'com.uttesh:pdfngreport:2.1.3'
compile 'org.uncommons:reportng:1.1.4'
compile 'org.testng:testng:7.0.0'
}
这是依赖项的问题:
我也试过用其他版本的sikuli,但也没用。 有没有可能这个问题和我的项目结构有关?
非常感谢任何帮助:)
尝试添加额外的 Maven 存储库:
repositories {
jcenter()
mavenCentral()
maven {
url 'https://repo.spring.io/snapshot/'
}
}
并为 sikuli 添加分组
dependencies {
compile group: 'org.sikuli', name: 'sikuli-api', version: '1.1.0'
}
Maven还有一个id需要转换:
<dependencies>
<dependency>
<groupId>testName</groupId>
<artifactId>testName</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
将转换为 Gradle 并使用此表示法:
dependencies {
implementation 'testName:testName:1.1.1'
}
也尝试使用 implementation 而不是 compile。 在 2018 年之后是不推荐使用的语法。
如果此更改未能成功构建,请尝试使用 api 作为声明,而不是 实现 。
前任。 api 'com.sikulix:sikulixapi:1.1.0'
毕竟如果适用,更新库是一个不错的选择。
希望对你有帮助!
如您在屏幕截图中所示,Gradle 尝试解析名为 com.sikulix:${sikulix.libs}:1.1.0
的依赖项。当然,这里有一个名为 ${sikulix.libs}
的占位符尚未被替换。
占位符实际上是在 pom file for sikuli 中的 Maven 配置文件中定义的。相关部分如下:
<profiles>
<profile>
<id>Windows</id>
<activation>
<os>
<family>windows</family>
</os>
</activation>
<properties>
<sikulix.libs>sikulixlibswin</sikulix.libs>
</properties>
</profile>
<profile>
<id>Unix</id>
<activation>
<os>
<family>unix</family>
</os>
</activation>
<properties>
<sikulix.libs>sikulixlibslux</sikulix.libs>
</properties>
</profile>
<profile>
<id>Mac</id>
<activation>
<os>
<family>mac</family>
</os>
</activation>
<properties>
<sikulix.libs>sikulixlibsmac</sikulix.libs>
</properties>
</profile>
</profiles>
<!-- ... -->
<dependency>
<groupId>com.sikulix</groupId>
<artifactId>${sikulix.libs}</artifactId>
<version>${project.version}</version>
</dependency>
不幸的是,Gradle 不支持 Maven 配置文件,因此您必须自己创建一个替换规则来修复它。你可以这样做:
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
if (details.requested.name == '${sikulix.libs}') {
def os = org.gradle.internal.os.OperatingSystem.current()
def targetName
if (os.isWindows()) {
targetName = 'sikulixlibswin'
} else if (os.isUnix()) {
targetName = 'sikulixlibslux'
} else if (os.isMacOsX()) {
targetName = 'sikulixlibsmac'
} else {
throw new GradleException("Unknow operating system for determining the sikulix distribution")
}
details.useTarget group: details.requested.group, name: targetName, version: details.requested.version
details.because 'The Maven dependency is relying on profiles to select the correct module name for the current operating system'
}
}
}
如果您使用的是 1.1.0 版,您可能还必须为名为 jxgrabkey
的传递依赖项之一定义一个额外的 Maven 存储库。这个存储库也在 pom 中定义,但不会被 Gradle 自动使用。您可以这样添加:
repositories {
maven {
url = 'http://mvn.is.inf.uni-due.de:8081/nexus/content/repositories/atunes-dependencies/'
}
}
但是如果你升级到最新的1.1.1,就没有这个必要了。
这种方式适合我
dependencies {
...
compile files('sikulifolder/sikulixapi.jar')
...
}
sikulifolder - 是我的项目目录中带有 jar 的文件夹。 并且不要忘记依赖顺序很重要。 例如,我将它设置在最后一个 selenium 依赖项之前。