Проблема с импортом проекта Gradle для XNAT - неразрешенный тип - PullRequest
0 голосов
/ 05 апреля 2019

Я впервые пытаюсь импортировать проект Gradle для XNAT, используя Eclipse 2018-12.Я создал проект, щелкнул правой кнопкой мыши, выбрал Gradle, затем Existing Gradle Project.После завершения импорта возникает ошибка с SimpleUploadPlugin.java - «Тип org.apache.ecs.ConcreteElement не может быть разрешен. На него косвенно ссылаются необходимые файлы .class».Я проверил, и у меня есть commons-lang3-3.8.1.jar.

Что мне нужно сделать, чтобы решить эту проблему, пожалуйста?

Мои зависимости build.gradle:

// TODO: This is a pretty minimal set of dependencies, so don't worry if you need to add more.
dependencies {
    implementation("org.nrg.xnat:web") {
        transitive = false
    }
    implementation("org.nrg.xnat:xnat-data-models") {
        transitive = false
    }
    implementation("org.nrg.xdat:core") {
        transitive = false
    }
    implementation "org.nrg:prefs"
    implementation "org.nrg:framework"

    implementation("turbine:turbine") {
        transitive = false
    }
    implementation("org.apache.velocity:velocity") {
        transitive = false
    }
    implementation("stratum:stratum") {
        transitive = false
    }

    implementation "log4j:log4j"
    implementation "io.springfox:springfox-swagger2"

    compile group: 'ecs', name: 'ecs', version: '1.4.2'
}

Ответы [ 2 ]

1 голос
/ 05 апреля 2019

Другой вариант - изменить конфигурацию зависимостей для org.nrg.xnat: web с compile или реализацией на compileOnly . Это позволяет вам объявить меньшее количество зависимостей для вашего плагина, потому что вы можете разрешить транзитивные зависимости. Зависимость ECS исходит от классов в самом XNAT, поэтому разрешение транзитивных зависимостей означает, что вам не нужно объявлять все, на что может быть косвенная ссылка. Я только что сделал это изменение в плагине аутентификации XNAT LDAP и пошел из этого:

implementation("org.nrg.xnat:web") {
    transitive = false
}
implementation("org.nrg.xnat:xnat-data-models") {
    transitive = false
}
implementation("org.nrg.xdat:core") {
    transitive = false
}
implementation("org.nrg:prefs") {
    transitive = false
}
implementation("org.nrg:framework") {
    transitive = false
}

implementation "org.springframework:spring-web"
implementation "org.springframework.security:spring-security-config"
implementation "org.springframework.security:spring-security-ldap"

implementation "org.apache.commons:commons-lang3"
implementation "org.hibernate.javax.persistence:hibernate-jpa-2.1-api"
implementation "com.google.guava:guava"
implementation "org.slf4j:slf4j-api"
implementation "log4j:log4j"

implementation "org.springframework.security:spring-security-web"
implementation "javax.servlet:javax.servlet-api"

compileOnly "com.google.code.findbugs:jsr305"
compileOnly "org.apache.ivy:ivy:2.4.0"
compileOnly("stratum:stratum") {
    transitive = false
}

К этому:

compileOnly "org.nrg.xnat:web"
compileOnly "org.springframework.security:spring-security-ldap"
compileOnly "org.slf4j:slf4j-nop"

Если вы запустите это:

$ ./gradlew dependencies

Вы увидите, что ecs: ecs: 1.4.2 проходит через ряд транзитивных зависимостей.

0 голосов
/ 05 апреля 2019

org.apache.ecs.ConcreteElement из Конструктивного набора элементов Apache (ECS) и, например, содержится в ecs-1.4.2.jar.

Чтобы решить эту проблему, добавьте в файл build.gradle зависимость, например:

// https://mvnrepository.com/artifact/ecs/ecs
compile group: 'ecs', name: 'ecs', version: '1.4.2'
...