Проблема с импортом проекта Gradle для XNAT - неразрешенный тип
Я впервые пытаюсь импортировать проект 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 ответа
Другой вариант - изменить конфигурацию зависимостей для org.nrg.xnat:web с компилирования или реализации на 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 проходит через ряд транзитивных зависимостей.
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'