基于Gradle的简单java应用程序构建

基于Gradle的简单java应用程序构建,java,gradle,Java,Gradle,我正在构建具有一些JAR依赖项的简单java应用程序。构建脚本如下所示。如果我使用命令,gradlemainjar,它构建得很好。但是,如果我使用gradlebuild,构建工作正常,但运行时我得到ClassNotFoundException,这表明JAR文件链接不正确 我理解我在mainjartasks下写的行,但是如何使它们即使在正常的buildtask下也能执行呢 apply plugin: 'java' apply plugin:'application' repositories

我正在构建具有一些JAR依赖项的简单java应用程序。构建脚本如下所示。如果我使用命令,
gradlemainjar
,它构建得很好。但是,如果我使用
gradlebuild
,构建工作正常,但运行时我得到
ClassNotFoundException
,这表明JAR文件链接不正确

我理解我在
mainjar
tasks下写的行,但是如何使它们即使在正常的
build
task下也能执行呢

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'
}
尝试添加

build.dependsOn mainjar
在文件末尾

尝试添加

build.dependsOn mainjar

在文件末尾,
应用程序
插件使用由
Jar
任务构建的Jar,而不是由
mainjar
任务构建的Jar。因此,
task mainjar(type:Jar){
行应该替换为
Jar{
。此外,不必重复
runtime
下的
compile
依赖项,而
configurations.compile.collect{zipTree(it)}
应该是
configurations.runtime.collect{zipTree(it)}
。(一旦你有了
runtime
依赖项,而这些依赖项又不是
compile
依赖项,这将开始产生影响。)

应用程序
插件使用由
Jar
任务构建的Jar,而不是由
mainjar
任务构建的Jar{
应替换为
jar{
。此外,无需重复
runtime
下的
compile
依赖项,并且
configurations.compile.collect{zipTree(it)}
应为
configurations.runtime.collect{zipTree(it)}
。(一旦您有了不属于
编译
依赖项的
运行时
依赖项,这将开始产生影响。)