假设我正在使用Gradle进行模块化库开发。在我的根项目我有子项目geometry
,algorithms
,visualizer
,我想每发布一个罐子神器。
到目前为止,我build.gradle
有以下部分:
apply plugin: 'maven-publish'
publishing {
publications {
publishDemos(MavenPublication) {
groupId 'ru.ifmo.ctddev.igushkin.cg'
artifactId 'geometry'
version globalVersion
artifact project(':geometry').tasks.getByName('jar')
}
publishAlgorithms(MavenPublication) {
groupId 'ru.ifmo.ctddev.igushkin.cg'
artifactId 'algorithms'
version globalVersion
artifact project(':algorithms').tasks.getByName('jar')
}
publishVisualizer(MavenPublication) {
groupId 'ru.ifmo.ctddev.igushkin.cg'
artifactId 'visualizer'
version globalVersion
artifact project(':visualizer').tasks.getByName('jar')
}
}
}
我的第一个问题:描述出版物的方式是否更短?例如,我想指出,对于每个子项目,我都需要一个带有artifactId
名称集的出版物。
接下来,我的子项目彼此依赖,algorithms
并且都visualizer
依赖于from的类geometry
,但是此时jars不包含依赖项,例如,用户必须向两者都添加依赖项,geometry
并且algorithms
如果他们想使用algorithms
。
因此,有没有一种方法可以提供某种自动依赖关系,以便添加algorithms
也可以添加geometry
?如果是,该怎么办?如果没有,提供模块化库的惯用方式是什么?我应该用依赖项组装罐子吗?
UPD:我对,而不是artifact ...
我应该使用from project(':...').components.java
,因为它会同时获取工件和依赖项吗?如果使用,如何分别选择依赖项artifact ...
?
通过将相同的发布配置注入到每个子项目中,可以减少冗长的发布声明。例如,对于具有以下结构的多重构建项目:
ROOT
│ build.gradle
│ settings.gradle
├───subA
│ build.gradle
│
├───subB
│ build.gradle
│
└───subC
build.gradle
在您的根目录中build.gradle
,您可以执行以下操作:
apply plugin:'maven-publish'
subprojects{
publishing {
publications {
"$project.name"(MavenPublication) {
groupId project.group
artifactId project.name
version project.version
from components.java
}
}
}
}
每个子项目都定义自己的groupid和版本,如下所示:
group = 'org.test.sample.A'
version = '1.0'
artifactId是从子项目名称中选取的。运行gradle publish
会生成以下结构的存储库:
org
└───test
└───sample
├───A
│ └───subA
│ └───1.0
│ subA-1.0.jar
│ subA-1.0.pom
├───B
│ └───subB
│ └───1.0
│ subB-1.0.jar
│ subB-1.0.pom
└───C
└───subC
└───1.0
subC-1.0.jar
subC-1.0.pom
此配置还自动处理依赖项。例如,如果在子项目中,subA
您有:
dependencies{
compile project(':subB')
}
由于我使用from components.java
而不是artifact
,因此插件知道要查找依赖项并为此生成一个pom subA
,包括:
<dependencies>
<dependency>
<groupId>org.gradle.sample.B</groupId>
<artifactId>subB</artifactId>
<version>1.0</version>
<scope>runtime</scope>
</dependency>
</dependencies>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句