簡體   English   中英

使用 Gradle 時如何從多模塊項目構建 jar?

[英]How to build a jar from a multi-module project when using Gradle?

我正在使用 Gradle 構建一個多模塊項目。 在我的dependencies部分,我dependencies於這個項目的另一個模塊:

dependencies {
    compile project(':my-other-module')
}

我的問題是我想構建一個.jar文件,它只包含最終文件中的本地模塊,而不是它的傳遞依賴項。 我試過這個:

jar {
    from project(':my-other-module').configurations.compile.collect { zipTree it }
}

但這也添加了所有傳遞依賴項。 我想創建一個只包含我自己的文件的.jar ,所以這個庫的用戶可以擁有他們自己版本的傳遞依賴項。 我怎么能這樣做?

進一步澄清:

我在我的項目中聲明了對外部 jars 的依賴,比如apache-commons 我希望這些不在我生成的.jar文件中,但我希望我的庫的用戶能夠將我的庫添加為依賴項,並讓Maven / Gradle下載傳遞依賴項。 我不希望這些傳遞依賴.jar文件I部署到Maven的中央。 compileOnly不是一個選項,因為我使用的依賴項如apache-commons不是由框架或容器提供的。 它們需要作為compile依賴項出現。 我只想構建和部署一個.jar文件,該文件包含我的項目中具有多個模塊的所有文件。

Gradle 有一個compile-only 依賴概念,類似於 Maven 提供的范圍:

僅編譯依賴項與常規編譯依賴項明顯不同。 它們不包含在運行時類路徑中,並且它們是不可傳遞的,這意味着它們不包含在依賴項目中。

您不需要的依賴項可以在 compileOnly 配置中聲明,而不是編譯,例如:

dependencies { compileOnly 'javax.servlet:servlet-api:2.5' }

默認情況下, compileOnly甚至對單元測試不可見。 我們在每個構建中都包含的通用 gradle 片段中對此進行了更改:

// compileOnly isn't visible to tests by default, add it
plugins.withType(JavaPlugin).whenPluginAdded {
    sourceSets {
        test.compileClasspath += configurations.compileOnly
        test.runtimeClasspath += configurations.compileOnly
    }
}

對於第二部分,我相信您想為其創建一個“胖”jar,我建議您使用非常好的Shadow Plugin創建您的 jar,而不是手動擴展 jar 任務。 默認情況下,影子插件不會在生成的 jar 中的compileOnly配置中包含任何內容。

我不確定它是否會幫助你,但你可以試試這個。

在您的 build.gradle 文件中,按如下方式自定義您的 jar 任務:

// This closure will return the full directory path of folder where your classes are built
ext.moduleClassPath = { moduleName ->
    def classOutputDirConst = "/classes/java/main"
    return "${project(":${moduleName}").buildDir}${classOutputDirConst}"
}

// Now jar task will include only the built file of specified project
jar {
    from(moduleClassPath("projectName1"), moduleClassPath("projectName2"))
}

在此處檢查 from(SourcePaths) 方法的參考:參考: https: //docs.gradle.org/current/dsl/org.gradle.jvm.tasks.Jar.html#org.gradle.jvm.tasks.Jar :從(java.lang.Object[])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM