Gradle Невозможно решить sikulixapi - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь изменить свой проект с 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, но это тоже не сработало. Возможно ли, что эта проблема связана со структурой моего проекта?

Я действительно ценю любую помощь:)

Ответы [ 3 ]

1 голос
/ 11 октября 2019

Как вы показали на скриншоте, Gradle пытается разрешить зависимость под названием com.sikulix:${sikulix.libs}:1.1.0. Конечно, здесь есть заполнитель, который называется ${sikulix.libs}, который не был заменен.

Указатель заполнителя определен в профиле Maven в файле pom для sikuli . Соответствующие части:

<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, в этом не будет необходимости.

0 голосов
/ 11 октября 2019

Maven также имеет идентификатор для преобразования:

<dependencies>
    <dependency>
        <groupId>testName</groupId>
        <artifactId>testName</artifactId>
        <version>1.1.1</version>
    </dependency>
</dependencies>

будет преобразован в Gradle с такой нотацией:

dependencies {
    implementation 'testName:testName:1.1.1' 
}

Также попробуйте использовать реализацию вместо compile. после 2018 года устарел синтаксис.

Если после этого изменения сборка не удалась, попробуйте вместо реализация использовать api в качестве объявления. ех. api 'com.sikulix:sikulixapi:1.1.0'

В конце концов это хороший выбор для обновления библиотеки, если это применимо.

Надеюсь, что это поможет вам!

0 голосов
/ 11 октября 2019

попробуйте добавить дополнительный репозиторий Maven:

repositories {
    jcenter()
    mavenCentral()
    maven {
        url 'https://repo.spring.io/snapshot/'
    }
}

И добавить группировку для сикули

dependencies {
    compile group: 'org.sikuli', name: 'sikuli-api', version: '1.1.0'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...