2014-05-05 3 views
1

Я создаю свое простое приложение java, которое имеет некоторые зависимости JAR. Сценарий сборки приведен ниже. Он строит отлично, если я использую команду, gradle mainjar. Однако, если я использую gradle build, сборка работает нормально, но я получаю ClassNotFoundException при запуске, что указывает на то, что файлы JAR не были связаны должным образом.Простая java Application build on 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 построенный jar задачи, а не один, построенный вашей mainjar задачи. Следовательно, строка task mainjar(type: Jar) { следует заменить на jar {. Кроме того, нет необходимости повторять зависимости compile под runtime, а configurations.compile.collect { zipTree(it) } должно быть configurations.runtime.collect { zipTree(it) }. (Это начнет меняться, если у вас есть runtime зависимостей, которые также не зависят от compile.)

+0

Спасибо за отличный ответ. Я принял –

2

пытаются добавить

build.dependsOn mainjar 

в конце файла