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

标签 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 时,它无法找到依赖项。 执行方法是什么?

最佳答案

就我而言,对于 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

它将把 jar 放在 ./build/libs

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

java -jar MyJar.jar

使用Java Decompile分析 jar 。

关于java - 使用 Gradle 执行包含依赖项的 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49519467/

相关文章:

java - 在对话框中单击“确定”时获取 Jtextfields 的值

java - 初学者 - Do While 循环和最小/最大条目

Android Gradle : rename/disable default build type

android - sdkmanager版本程序包未签名

android - 如何将 Proguard 混淆模块导入 Android Studio?

java - 使用DSL的gradle插件如何工作?

java - 使用Gradle将外部配置文件添加到jar

java - 添加不带 .jar 文件的 Apache xml-rpc 库

java - 如何从 javascript 访问 java.util.List session ?

android - 找不到 aapt2-proto-7.0.0-beta04-7396180.jar