为了账号安全,请及时绑定邮箱和手机立即绑定

Gradle 无法解析 sikulixapi

Gradle 无法解析 sikulixapi

白衣染霜花 2023-10-13 14:36:07
我正在尝试将我的项目从 Maven 更改为 Gradle,但我遇到了一些依赖项问题。这是我的 build.gradle 文件:plugins {    id 'java'}group 'de.myurl.test'version '1.0-SNAPSHOT'sourceCompatibility = 1.8repositories {    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 但也不起作用。这个问题有可能与我的项目结构有关吗?我真的很感谢任何帮助:)
查看完整描述

4 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

正如屏幕截图所示,Gradle 尝试解析名为 的依赖项com.sikulix:${sikulix.libs}:1.1.0。当然,这里有一个名为 的占位符${sikulix.libs}尚未被替换。

占位符实际上是在sikuli 的 pom 文件的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 版本,您可能还需要为名为 的传递依赖项之一定义一个额外的 Maven 存储库jxgrabkey。该存储库也在 pom 中定义,但不会被 Gradle 自动使用。你可以这样添加:


repositories {

    maven {

        url = 'http://mvn.is.inf.uni-due.de:8081/nexus/content/repositories/atunes-dependencies/'

    }

}

但如果你升级到最新的1.1.1,就没有必要了。


查看完整回答
反对 回复 2023-10-13
?
qq_花开花谢_0

TA贡献1835条经验 获得超6个赞

这样对我有用


dependencies {

    ... 

    compile files('sikulifolder/sikulixapi.jar')

    ...

}

sikulifolder - 是我的项目目录中包含 jar 的文件夹。并且不要忘记依赖顺序很重要。例如,我在最后一个硒依赖项之前设置它。


查看完整回答
反对 回复 2023-10-13
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

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' 

}

还尝试使用实现而不是编译。2018 年之后已弃用语法。


如果此更改后构建未成功,请尝试使用api作为声明而不是实现。前任。api 'com.sikulix:sikulixapi:1.1.0'


毕竟,如果适用的话更新库是一个不错的选择。


希望对您有帮助!


查看完整回答
反对 回复 2023-10-13
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

尝试添加额外的 Maven 存储库:


repositories {

    jcenter()

    mavenCentral()

    maven {

        url 'https://repo.spring.io/snapshot/'

    }

}

并为 sikuli 添加分组


dependencies {

    compile group: 'org.sikuli', name: 'sikuli-api', version: '1.1.0'

}


查看完整回答
反对 回复 2023-10-13
  • 4 回答
  • 0 关注
  • 68 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信