Я пишу библиотеку Java, и я хотел бы построить библиотеку с Gradle, а затем протестировать ее из локального тестового проекта.Включая библиотеку Java, построенную с помощью Gradle throws NoClassDefFoundError
Я бы предпочел использовать Gradle 3.3 для своей цели. Библиотека должна быть построена для Java5 и выше.
До сих пор мой build.gradle
выглядит следующим образом:
plugins {
id 'jvm-component'
id 'java-lang'
}
repositories {
mavenCentral()
}
model {
components {
main(JvmLibrarySpec) {
sources {
java {
dependencies {
module 'commons-codec:commons-codec:1.10'
module 'org.apache.httpcomponents:httpcore:4.4.6'
module 'org.apache.httpcomponents:httpclient:4.5.3'
}
}
}
api {
exports 'io.simplepush'
}
targetPlatform 'java5'
}
}
}
Исходный код библиотеки находится в src/main/java/io/simplepush/Notification.java
и зависит от зависимостей, указанных в файле build.gradle
.
Здание библиотеки с ./gradlew build
прекрасно работает и создает build/jars/main/jar/main.jar
.
Однако, когда я запускаю тестовый проект с IntelliJ (после включения main.jar
в тестовый проект), я получаю следующее сообщение об ошибке во время выполнения:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/HttpEntity
.
Кажется, что тестовый проект не знает о зависимостях времени выполнения, необходимых моей библиотеке.
Я не уверен, что это правильный способ рассказать тестовому проекту о зависимостях моей библиотеки. Я не хочу толстую банку, которая включает в себя все зависимости.
Листинг всех зависимостей в самом проекте тестирования также не является вариантом.
Желательно, чтобы библиотека сама рассказала тестовому проекту о том, какие зависимости ему нужны.
Почему бы не добавить библиотечные тесты к самой библиотеке? –
Потому что я хочу узнать о процессе включения библиотеки в проект с Gradle. – tymm
Возможно, принятый ответ на этот вопрос поможет: http://stackoverflow.com/questions/24975745/gradle-dependencies-compile-project-by-relative-path – vinegarbin