我看过这篇文章Gradle multi project distribution,但仍然有一些疑问。
我想创建以下项目布局
root
|--lib-java-module
|--spring-boot-module
|--3PP_A_module # not java
| |-- custom scripts, config
|--3PP_B_module # not java
| |-- custom scripts, config
|--dist-module
正如您可能已经猜到的,我希望dist-module使用libjava.jar、sprintbootapp.jar、3pp-a.tar和3pp-b.tar来构建myapp-dist.tar.gz。
myapp-dist.tar.gz
libjava.jar
sprintbootapp.jar
3pp-a.tar
3pp-b.tar.
3pp-a-module和3pp-b-module只包含一些配置文件和启动脚本,没有java和编译代码,如何单独打包成tar文件(不压缩)?
如何定义dist-module对其他模块的依赖关系?当dist-module触发构建时,是否可以构建其他模块?
- 更新日期:**
我根据@marco-r的答案设置了我的测试项目,除了打包war文件外,它工作正常。从github https://github.com/KiranMohan/study-spring-boot checkout 测试项目。
这是感兴趣的项目设置。
include ':sb-2.1-multi-package', ':sb-2.1-multi-package:hello-rest-lib',
':sb-2.1-multi-package:hello-rest-standalone-jar',
':sb-2.1-multi-package:hello-rest-war'
include 'sb-2.1-3pp-resources'
include 'sb-2.1-build'
然而,将hello-rest-war添加到sb-2.1-build.tar.gz失败。
打包的不是war文件,而是依赖项。
dependencies {
archivesDeps project(path: ':sb-2.1-3pp-resources', configuration: 'archives')
javaDeps project(":sb-2.1-multi-package:hello-rest-war")
}
...
task copyJavaDeps(type: Copy) {
inputs.files(configurations.javaDeps)
from configurations.javaDeps
into "${ARCHIVE_DIRECTORY}/lib"
}
...
// create distribution bundle
distributions {
main {
contents {
from ARCHIVE_DIRECTORY
into "/springapp/multimodule"
}
}
}
Package 内容物
springapp/multimodule/lib/classmate-1.4.0.jar
springapp/multimodule/lib/hello-rest-lib-0.0.1-SNAPSHOT.jar
springapp/multimodule/lib/hibernate-validator-6.0.16.Final.jar
...
springapp/multimodule/lib/tomcat-embed-websocket-9.0.17.jar
springapp/multimodule/lib/validation-api-2.0.1.Final.jar
springapp/multimodule/sb-2.1-3pp-resources/config/3pp.json
如何打包war文件(hello-rest-war模块)并且不带任何传递依赖?
1条答案
按热度按时间brccelvz1#
这是一个多问题的场景,所以我将分几部分来解决它。
1.由于所有
3PP_X_module
具有相同的构建要求,因此在每个子模块中创建一个build.gradle
,这些子模块引用具有所需通用功能的实际构建等级:1.在父文件夹中,创建之前引用的
tarArtifact.gradle
,使其具有TAR引用子项目的子文件夹(任意选择为contents
)内容的功能:由于
archives
配置连接到tarContents
(builtBy: tarContents
)的输出,因此可以使用archives
配置检索所需的TAR
,作为自然构建此项目的输出。1.在
dist-module
中创建以下build.gradle
文件:此gradle文件包括以下内容:
tar.gz
文件。GZIP
配置distTar
任务(DistributionPlugin
插件的)以压缩使用该任务生成的任何TAR
。wholeProjectDist
以捕获dist-module
本身的依赖项;我们将在分发插件的任务中使用它。dist-module
的依赖项声明为兄弟项目的子项目输出的工件;使用新创建的wholeProjectDist
。main
配置,使configurations.wholeProjectDist
中的所有文件都成为contents
1.在
dist-module
下创建一个settings.gradle
文件,以允许它使用includeFlat
访问其兄弟模块:1.在父文件夹中包含一个
settings.gradle
文件,以包含所有子模块(作为根项目):1.通过调用gradle命令(从根文件夹)构建所需的
tar.gz
文件: