Java 라이브러리를 작성 중이므로 Gradle을 사용하여 라이브러리를 빌드 한 다음 로컬 테스트 프로젝트에서 테스트하고 싶습니다.Gradle throw로 빌드 된 Java 라이브러리 포함 NoClassDefFoundError
나는 내 목표를 위해 Gradle 3.3을 선호한다. 라이브러리는 Java5 이상으로 빌드해야합니다. 라이브러리의
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
파일에 언급 된 의존성에 따라 달라집니다
지금까지 내 build.gradle
은 다음과 같습니다.
./gradlew build
으로 라이브러리를 빌드하면 build/jars/main/jar/main.jar
이 생성됩니다.
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/HttpEntity
: 나는 (테스트 프로젝트에 main.jar
를 포함한 후) 인 IntelliJ에서 테스트 프로젝트를 실행할 때
그러나, 나는 다음과 같은 런타임 오류가 발생합니다.
테스트 프로젝트가 내 라이브러리에 필요한 런타임 종속성에 대해 알지 못하는 것 같습니다.
내 프로젝트의 의존성에 대해 테스트 프로젝트에 알리는 올바른 방법이 무엇인지 잘 모르겠습니다. 모든 종속성을 포함하는 팻 (fat jar)을 원하지 않습니다.
테스트 프로젝트 자체의 모든 종속성 나열도 옵션이 아닙니다.
바람직하게는 라이브러리 자체가 테스트 프로젝트에 필요한 종속성을 알리고 싶습니다.
왜 라이브러리 테스트를 라이브러리 자체에 추가하지 않습니까? –
Gradle을 사용하여 프로젝트에 라이브러리를 포함시키는 과정에 대해 배우고 싶습니다. – tymm
아마도이 질문에 대한 대답이 도움이 될 것입니다. http://stackoverflow.com/questions/24975745/gradle-dependencies-compile-project-by-relative-path – vinegarbin