在Gradle上构建简单的Java应用程序

时间:2014-05-05 08:47:05

标签: java gradle

我正在构建我的简单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'
}

2 个答案:

答案 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

在您的文件末尾