Gradle 如何复制所有运行时库,包括依赖项目中的 jars

标签 gradle

我有一个正在构建的多模块 gradle 项目。
现在我想实现一个任务,该任务将实际准备所有已构建模块的可交付包以及它们的所有依赖项以及从 module-1.jar 运行主类所需的所有其他内容

为了实现这一点,我想将所有运行时依赖项与一些特定于环境的配置文件(属性、XML)一起复制到一个文件夹中,然后将它们打包到一个存档文件中。

假设我有这个结构:

    Root Project
      /      \
 module-1   module-2

并且 module-1 依赖于 module-2
module-1.gradle:

task runModule1 << {
    // Invoke some methods to prepare the module-1 run
    // such as setting module-1 runLocation
    copy {from configurations.runtime into runLocation}
}

dependencies {
    compile project(':module-2')
    //... Other thirds party dependencies
}

在复制调用结束时,所有第三方依赖项都被很好地复制到我需要它们的地方。然而 module-2.jar 不是并且想知道为什么。当然,我可以重复自己并从 module-2 的构建文件夹中手动复制 module-2.jar,但对我来说,这看起来不是正确的方法。它必须是一个很好的 gradle 解决方案。

预先感谢您的意见。

最佳答案

你所描述的听起来和 Application plugin 完全一样。提供。它将为您处理所有依赖项复制等。

假设 module-1包含您的主类,您将以下内容添加到 module-1配置:

apply plugin: 'application'
mainClassName = "org.stackoverflow.example.MyApp"

由于module-1module-2 有依赖关系正确声明,您现在可以像这样运行它:
gradle module-1:run
:module-2:compileJava
:module-2:processResources UP-TO-DATE
:module-2:classes
:module-1:compileJava
:module-1:processResources UP-TO-DATE
:module-1:classes
:module-1:run

关于Gradle 如何复制所有运行时库,包括依赖项目中的 jars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31109537/

相关文章:

grails - Gradle Geb saucelabs插件

android - 应用程序中心:构建失败-找不到gradleWrapperMain

jenkins - 使用 Docker 运行 Jenkins 时如何配置 Gradle 缓存

gradle - 由于 “prefix string too short”无法升级到Gradle 6.6

Android Studio ClassCastException : com. worklight.wlclient.WLPersistentCookieStore

java - 无法在 JavaFX 项目中使用 getResource() 访问资源

android - 如何强制 Jacoco 在 Gradle 中使用特定版本

curl - 在Groovy中将JSON传递给curl似乎取决于平台

intellij-idea - IntelliJ在编译时的版权

android-studio - Android Studio-Gradle同步失败:找不到gradle-3.6.2.jar(com.android.tools.build:gradle:3.6.2)