目前我有两个使用gradle build.gradle的项目 . 第一个是创建一个胖jar文件,我想将其包含在war文件中 . 我认为编译它就足够了,但它似乎并没有在我的war文件的/ lib目录中结束 . 任何人都有想法我很陌生 .
dependencies {
compile project(':JarProject')
providedCompile 'javax.servlet:javax.servlet-api:3.1.0'
providedCompile 'org.apache.tomcat:tomcat-jsp-api:7.0.55'
}
war {
archiveName 'WarProject.war'
from 'JarProject/build/libs'
webXml = file('src/web.xml')
}
第二个项目战是否需要在提供的运行时间?或者我应该从本地maven仓库中的其他项目发布jar并以这种方式包含它?
2 回答
War任务本质上就像一个关于它在战争中打包的东西的CopyTask,所以documentation on working with files很有用 . 从本质上讲,我认为你需要像(未经测试的):
话虽这么说,使用
mavenLocal()
并在那里发布也有效,但是当战争包含一些来自本地的旧版本时,它会导致意想不到的结果,从上面的文件系统中明确地拾取jar更好 .我认为优雅的解决方案是使用multi project builds和project level dependencies . 您可以将两个构建作为相同Gradle构建的单独项目,并将"jar project"添加为常规
compile
依赖项 .你是如何宣布依赖的?我假设您有一个包含子项目A和B的多项目构建,两者都使用War插件 . 我使用Gradle 2.4进行了实验,如果我像这样声明B / build.gradle:
然后B.war包含WEB-INF / lib / A.jar . 如果您正确遵循Gradle War插件的惯例(将Web资源放在A / src / main / webapp /和A / src / main / resources /中的代码相关资源),那么A.jar应包含您想要的内容 .
见this