2014-05-05 39 views
1

我正在構建我的簡單Java應用程序,它具有一些JAR依賴關係。構建腳本如下所示。如果使用命令gradle mainjar,它會很好。但是,如果我使用gradle build,構建工作正常,但運行時我得到ClassNotFoundException,表明JAR文件未正確鏈接。簡單的Java應用程序構建在Gradle上

我瞭解我在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' 
} 

回答

3

末的application插件使用由jar任務,而不是一個由您mainjar任務內置生成JAR。因此,行task mainjar(type: Jar) {應替換爲jar {。此外,不必重複依賴關係runtime,configurations.compile.collect { zipTree(it) }應爲configurations.runtime.collect { zipTree(it) }。 (一旦你有runtime依賴關係,這不會也compile依賴關係,這將開始有所作爲。)

+0

感謝您的出色答案。我接受了 –

2

嘗試添加

build.dependsOn mainjar 

在你的文件

相關問題