簡體   English   中英

如何使用Gradle將Jar中的所有文件包含到戰爭中

[英]How to include all files from jar into war using Gradle

我正在嘗試插件:

  • io.freefair.war-overlay-但是它只是將一場戰爭疊加到另一場戰爭,
  • waroverlay-它具有適當的選項“ includeWarJars true”,但不適用於我。

目前,我正在嘗試編寫腳本:

dependencies {
    /* jar, his files I would like to include in war */
    compile project(':my_jar_1')
}

war {

    /* Step 1. Copy all from my_jar_1 into WEB-INF/classes */

    into('WEB-INF/classes') {
        from configurations.compile
                .filter { it.name.startsWith("my_jar_1") }
                .collect { zipTree(it).matching { exclude 'META-INF/**/*.*' }}
    }

    /* Step 2. Deleting jar from war WEB-INF/lib. I got stuck here. It println, but doesn't delete jar */

    doLast {
        zipTree('build/libs/war_1-0.0.0.war').files.each {
            if (it.path.endsWith('.jar')) {
                delete it
                println 'DELETED ' + it.path
            }
        }
    }
}

有人可以告訴我如何使其工作嗎? 或者也許smb知道更優雅的解決方案?

我也在嘗試聲明自己的配置

configurations { overlay }
dependencies { 
    overlay project(':my_jar_1') 
}
war {
        into('WEB-INF/classes') {
            from configurations.overlay
            ...

但它顯示錯誤

失敗:構建失敗,發生異常。

  • 出了什么問題:在最新檢查期間無法捕獲任務'war'屬性'rootSpec $ 1 $ 1'的輸入文件的快照。

    無法為文件“ /home/user/projects/OveralJarToWar/my_jar_1/build/libs/my_jar_1-1.0-SNAPSHOT.jar”創建MD5哈希。

WEB-INF/libWEB-INF/classes內容由war任務的單個屬性classpath配置。 根據文檔:

該類路徑中的所有JAR或ZIP文件都包含在WEB-INF / lib目錄中。 該類路徑中的所有目錄都包含在WEB-INF / classes目錄中

因此,在您的情況下,應將classpath修改如下

war {
    def myJar = project(':my_jar_1').jar.outputs
    def myClassesAndResources = project(':my_jar_1').sourceSets.main.output
    classpath = classpath - myJar + myClassesAndResources
}

暫無
暫無

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

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