我正在构建我的简单java应用程序,它有一些JAR依赖项。构建脚本如下所示。如果我使用命令gradle mainjar
,它就可以正常构建。但是,如果我使用gradle build
,则构建工作正常,但我在运行时得到ClassNotFoundException
,表明JAR文件未正确链接。
我理解我在mainjar
任务下编写的行,但是如果使用正常的build
任务,我该如何执行它们。
apply plugin: 'java'
apply plugin:'application'
repositories {
mavenCentral()
}
sourceSets {
main {
java {
srcDir 'src'
}
}
mainjar
}
jar {
manifest { attributes 'Main-Class': 'in.co.madhur.wunderjava.Main' }
}
mainClassName = "in.co.madhur.wunderjava.Main"
task mainjar(type: Jar) {
from files(sourceSets.main.output.classesDir)
from files(sourceSets.main.output.resourcesDir)
from {configurations.compile.collect {zipTree(it)}}
manifest {
attributes 'Main-Class': 'in.co.madhur.wunderjava.Main'
}
}
dependencies {
compile 'com.fasterxml.jackson.core:jackson-core:2.3.0-rc1'
compile 'com.fasterxml.jackson.core:jackson-databind:2.3.0-rc1'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.3.0-rc1'
compile 'com.squareup.retrofit:retrofit:1.5.0'
}
dependencies {
runtime 'com.fasterxml.jackson.core:jackson-core:2.3.0-rc1'
runtime 'com.fasterxml.jackson.core:jackson-databind:2.3.0-rc1'
runtime 'com.fasterxml.jackson.core:jackson-annotations:2.3.0-rc1'
runtime 'com.squareup.retrofit:retrofit:1.5.0'
}
答案 0 :(得分:3)
application
插件使用由jar
任务构建的Jar,而不是mainjar
任务构建的Jar。因此,行task mainjar(type: Jar) {
应替换为jar {
。此外,没有必要在compile
下重复runtime
个依赖项,而configurations.compile.collect { zipTree(it) }
应该是configurations.runtime.collect { zipTree(it) }
。 (一旦您拥有runtime
依赖关系的compile
依赖关系,这将开始产生影响。)
答案 1 :(得分:2)
尝试添加
build.dependsOn mainjar
在您的文件末尾