【问题标题】:Gradle: Zipping Multi-project dependencies into application JAR file?Gradle:将多项目依赖项压缩到应用程序 JAR 文件中?
【发布时间】:2016-04-09 15:03:49
【问题描述】:

build.gradle 脚本中,我将执行以下任务以将依赖项包含到可运行的应用程序 JAR 文件中。

jar {
manifest {
    attributes(
            'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
            'Main-Class': 'org.somepackage.MyMainClass'
    )
}
from configurations.compile.collect { entry -> zipTree(entry) }
}

但是,在多项目设置中,我在 JAR 文件中缺少一些依赖项。我最终发现没有包含在其他项目build.gradle 脚本中指定的任何依赖项,除非父项目也具有这些依赖项。

例如,项目 A 依赖于项目 B。项目 B 使用 Google Guava。当我将项目 A 部署到可运行的 JAR 文件时,不会包含 Google Guava,并且会出现运行时错误。如果项目 A 在其 build.gradle 脚本中冗余地指定了 Google Guava,那么它运行得很好。

如何修改上面的jar 任务以在多项目设置中包含依赖项?

【问题讨论】:

    标签: java maven gradle jar


    【解决方案1】:

    我从this post 那里得到了一些似乎可行的想法。

    jar {
        manifest {
            attributes(
                    'Main-Class': 'com.swa.rm.pricing.reporting.ux.SaleMxReportingUI'
            )
        }
    }
    
    task fatJar(type: Jar) {
        manifest.from jar.manifest
        classifier = 'all'
        from {
            configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) }
        } {
            exclude "META-INF/*.SF"
            exclude "META-INF/*.DSA"
            exclude "META-INF/*.RSA"
        }
        with jar
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-09
      • 2010-11-24
      • 2017-11-17
      • 1970-01-01
      • 2016-12-25
      • 1970-01-01
      • 1970-01-01
      • 2018-11-10
      相关资源
      最近更新 更多