我正在开发一个gradle多项目(java),其中一些子项目是应用程序(具有主类,并且是可执行的),而另一些是库(例如,最终被打包为jar) ,其他一些子项目定义依赖)。它工作正常。
我希望能够打包(tar)整个项目进行生产,根据一些结构,我的用户可以在以后轻松部署和使用。
目前, distTar 任务为每个应用程序项目创建build/distribution/project-name.tar
,并为每个项目构建目录下的每个非应用程序项目创建build/libs/project-name.jar
。这是朝着正确方向迈出的一步,但我想将内容合并为一件我可以分发的内容。
举个例子,现在运行 distTar 之后:
myapp/
README
docs/
services/
service1/
build/
libs/service1.jar
<other build dirs I don't want to distribute>
service2/
build/
distributions/service2.tar
<other build dirs I don't want to distribute>
service3/
build/
distributions/service3.tar
<other build dirs I don't want to distribute>
和service2.tar的内容是:
service2/lib/service2.jar
service2/lib/some-service2-dependency.jar
service2/bin/service2 (start script)
service2/config.yml
(对于service3.tar也是如此)。
我希望我的最终结果是单个myapp.tar(.gz),其中包含类似的目录结构,但只包含生产文件:
README
docs/
services/
service1/
lib/service1.jar
service2/
lib/service2.jar
lib/some-service-dependency.jar
bin/service2 (start script)
config.yml
service3/
lib/service3.jar
lib/some-service-dependency.jar
bin/service3 (start script)
config.yml
不确定实现此类任务的最佳方式是什么。我是否创建了一个依赖于distTar的父级任务,并复制文件,解压缩等等? (试过没那么成功)。
非常感谢!
更新: 我开始沿着这些方向做点什么:
distributions {
main {
contents {
into('scripts') {
from {'scripts/sbin'}
}
into('service1') {
from {tarTree(tarFileForProject("service1"))}
}
into('service2') {
from {tarTree(tarFileForProject("service2"))}
}
into ...
}
}
}
distTar.dependsOn([subprojects.clean, subprojects.distTar])
(其中tarFileForProject是一个简单的函数,它返回给定子项目名称的build / distributions / * .tar文件的路径。)
它似乎有用,但也看起来很难看。我想知道是否有更清洁的方法来做到这一点。