使用Gradle执行包含依赖项的jar

时间:2018-03-27 17:54:21

标签: java gradle build.gradle

当外部依赖项位于单独的lib文件夹中时,它工作正常,但由于需求的更改,jar应包含其中的所有外部依赖项,而不是单独的文件夹中。 任何人都可以指导我如何执行jar文件 这是我的Gradle文件

apply plugin: 'java-library-distribution'

group = 'com.MyCompany'
version = '0.0.1-SNAPSHOT'

description = "data-purge-service"

sourceCompatibility = 1.8
targetCompatibility = 1.8
tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}


dependencies {
    compile group: 'commons-configuration', name: 'commons-configuration', version:'1.6'
    compile group: 'log4j', name: 'log4j', version:'1.2.17'
    compile group: 'log4j', name: 'apache-log4j-extras', version:'1.2.17'
    compile group: 'org.quartz-scheduler', name: 'quartz', version:'2.2.1'
    compile group: 'org.json', name: 'json', version:'20151123'
    compile group: 'com.google.inject', name: 'guice', version:'3.0'
    compile group: 'commons-codec', name: 'commons-codec', version:'1.10'
    compile group: 'org.apache.velocity', name: 'velocity', version:'1.7'
    compile group: 'javax.mail', name: 'mail', version:'1.4'
    compile group: 'org.jsoup', name: 'jsoup', version:'1.8.3'
    runtime group: 'mysql', name: 'mysql-connector-java', version:'6.0.6'
    testCompile group: 'junit', name: 'junit', version:'3.8.1'
}

jar {
    manifest { 
        attributes "Main-Class": "com.MyCompany.datapurge.service.App"
      }


    from {
      configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }

    sourceSets {
      main {
        output.resourcesDir = "build/libs/resources"
      }
    }
}

当我执行生成的jar时,它无法找到依赖项。 执行它的方法是什么?

2 个答案:

答案 0 :(得分:0)

“在此tutorial中,我们将向您展示如何使用Gradle构建工具创建具有依赖项的单个Jar文件。”

答案 1 :(得分:0)

就我而言,在gradle版本5中,依赖项仅在我使用configurations.runtimeClasspath而不是configurations.compile时才添加,就像在许多地方发布的那样。

这里是完整的任务示例:

task BuildJar(type: Jar) {
    manifest {
        attributes(
                'Main-Class': 'org.mycompany.mainclass'             
        )
    }
    classifier = 'all'
    baseName = 'MyJar'
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
         }
            {
                exclude "META-INF/*.SF"
                exclude "META-INF/*.DSA"
                exclude "META-INF/*.RSA"
            }
    with jar

}

它将创建包含所有内容的单个jar。

要运行任务,请执行以下操作:

gradle task BuildJar //use gradew.bat for windows

它将罐子放在./build/libs

要运行,只需执行以下操作:

java -jar MyJar.jar

使用Java Decompile来分析罐子。