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'
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
表 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 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 的閉包來配置不同的文件集。
更多建議: