次のディレクトリとファイル構造でマルチプロジェクト ビルドを構成したとします。
/combined-war
/main-project
/src
/webapp
/WEB-INF
web.xml
build.gradle
/other-project
/resources
/WEB-INF
/classes
config.txt
build.gradle
build.gradle
のディレクトリの内容を のディレクトリjettyRun
の内容と結合できるようにするには、 ofに回避策を追加する必要があります(ユーザーsiasia が gist に投稿したものを適応させました)。webapp
main-project
resources
other-project
build.gradle
main-project
同じディレクトリの内容を war ファイルに追加するのは非常に簡単で、Gradle ユーザー ガイドとDSL リファレンスに記載されています。
apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'jetty'
import org.gradle.api.plugins.jetty.internal.JettyPluginWebAppContext
def newResourceCollection(File... resources) {
def script = '''
import org.mortbay.resource.ResourceCollection
new ResourceCollection(resources)
'''
def shell = new GroovyShell(JettyPluginWebAppContext.class.classLoader)
shell.setProperty("resources", resources as String[])
return shell.evaluate(script)
}
jettyRun.doFirst {
jettyRun.webAppConfig = new JettyPluginWebAppContext()
jettyRun.webAppConfig.baseResource = newResourceCollection(
// list the folders that should be combined
file(webAppDirName),
file("${project(':other-project').projectDir}/resources")
)
}
war {
from("${project(':other-project').projectDir}/resources")
}
実行するたびに、指定されたディレクトリを組み合わせgradle jettyRun
た新しいディレクトリが作成されます。ResourceCollection
デフォルトでは、Jetty は提供しているすべてのファイルを (少なくとも Windows では) ロックします。したがって、Jetty の実行中にこれらのファイルを編集する場合は、次の解決策をご覧ください。
アップデート
other-project
この場合、別の Gradle プロジェクトではないため、2 つのタスクは次のbuild.gradle
ようになります。
jettyRun.doFirst {
jettyRun.webAppConfig = new JettyPluginWebAppContext()
jettyRun.webAppConfig.baseResource = newResourceCollection(
file(webAppDirName),
file("$projectDir/../other-project/resources")
)
}
war {
from("$projectDir/../other-project/resources")
}
ファイルを1つだけ追加するソリューションを知りません(例: config.txt
)。常に完全なディレクトリを追加する必要があります。