java - Gradle 无法解析 sikulixapi

标签 java selenium selenium-webdriver gradle dependency-management

我正在尝试将我的项目从 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'
}

这是依赖项的问题:

enter image description here

我也尝试过使用其他版本的 sikuli 但也不起作用。 这个问题有可能与我的项目结构有关吗?

我真的很感谢任何帮助:)

最佳答案

如屏幕截图所示,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,则不需要这样做。

关于java - Gradle 无法解析 sikulixapi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58341671/

相关文章:

python - 选择第一个下拉列表后,第二个下拉列表发生变化

python - 如何在 Python 上使用 Selenium 选择日期范围?

java - 尝试运行 Chromedriver 时我的配置有什么问题? (IntelliJ/Spring)

java - java转xml和java转json jar的命名约定解释

java - hql 从多对一关系表中选择表记录

java - 原子地执行多个操作

java - 如何使用 Selenium 识别所选项目的 Web 元素,以动态更改名称和 id

c# - 如何使用 C# 中的 Selenium chrome 驱动程序从网页打印到控制台的 URL 列表?

testing - 如何点击存在于 td 中的 "Logout"

java - 使用 WebLogic 11g 实现代理