Gradle War 插件

2022-08-03 15:31 更新

War 的插件繼承自 Java 插件并添加了對組裝 web 應(yīng)用程序的 WAR 文件的支持。它禁用了 Java 插件生成默認(rèn)的 JAR archive,并添加了一個(gè)默認(rèn)的 WAR archive 任務(wù)。

用法

要使用 War 的插件,請?jiān)跇?gòu)建腳本中包含以下語句:

使用 War 插件

build.gradle

apply plugin: 'war'  

任務(wù)

War 插件向 project 中添加了以下任務(wù)。

表 26.1. War 插件 - 任務(wù)

任務(wù)名稱 依賴于 類型 描述
war compile War 組裝應(yīng)用程序 WAR 文件。

War 插件向 Java 插件所加入的 tasks 添加了以下的依賴。

表 26.2. War 插件 - 額外的 task 依賴

任務(wù)名稱 依賴于
assemble war

圖 26.1. War 插件 - tasks

項(xiàng)目布局

表 26.3. War 插件 - 項(xiàng)目布局

目錄 意義
from <s1>'src/main/webapp'</s1> Web 應(yīng)用程序源代碼

依賴管理

War 插件添加了兩個(gè)依賴配置: providedCompile 和 providedRuntime。雖然它們有各自的compile 和 runtime 配置,但這些配置有相同的作用域,只是它們不會(huì)添加到 WAR 文件中。要特別注意,這些 provided 配置的傳遞使用。假設(shè)你添加 commons-httpclient:commons-httpclient:3.0 依賴到任何一個(gè) provided 配置。這個(gè)依賴又依賴于 commons-codec。這意味著 httpclient 和 commons-codec 都不會(huì)添加到你的 WAR 中,即使 commons-codec 是 compile 配置上的一個(gè)顯示依賴。如果你不想要這種傳遞行為,只是把 provided 依賴聲明成和commons-httpclient:commons-httpclient:3.0@jar 一樣。

公約屬性

表26.4. War 插件 ??- 目錄屬性

屬性名稱 類型 默認(rèn)值 描述
webAppDirName String from <s1>'src/main/webapp'</s1> web 應(yīng)用程序源目錄的名稱,是一個(gè)相對于項(xiàng)目目錄的目錄名稱。
webAppDir File (read-only) webAppDirName Web 應(yīng)用程序的源目錄。

這些屬性由一個(gè) WarPluginConvention 公約對象提供。

War

War task 的默認(rèn)行為是將 src/main/webapp 的內(nèi)容復(fù)制到 archive 的根目錄下。你的 webapp 目錄自然可能包含一個(gè) WEB-INF 子目錄,這個(gè)子目錄可能還再包含一個(gè) web.xml 文件。已編譯的類被編譯進(jìn) WEB-INF/classes。所有 runtime 配置的依賴被復(fù)制到 WEB-INF/lib。

自定義

下面是一個(gè)示例,展示了最重要的自定義選項(xiàng):

war 插件的自定義

build.gradle

configurations {
   moreLibs
}
repositories {
   flatDir { dirs "lib" }
   mavenCentral()
}
dependencies {
    compile module(":compile:1.0") {
        dependency ":compile-transitive-1.0@jar"
        dependency ":providedCompile-transitive:1.0@jar"
    }
    providedCompile "javax.servlet:servlet-api:2.5"
    providedCompile module(":providedCompile:1.0") {
        dependency ":providedCompile-transitive:1.0@jar"
    }
    runtime ":runtime:1.0"
    providedRuntime ":providedRuntime:1.0@jar"
    testCompile 'junit:junit:4.11'
}
    moreLibs ":otherLib:1.0"
}
war {
    from 'src/rootContent' // adds a file-set to the root of the archive
    webInf { from 'src/additionalWebInf' } // adds a file-set to the WEB-INF dir.
    classpath fileTree('additionalLibs') // adds a file-set to the WEB-INF/lib dir.
    classpath configurations.moreLibs // adds a configuration to the WEB-INF/lib dir.
    webXml = file('src/someWeb.xml') // copies a file to WEB-INF/web.xml
}  

當(dāng)然,你可以用一個(gè)定義了 excludes 和 includes 的閉包來配置不同的文件集。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號