0%

pom生成方案

在项目开发完毕后,publish Maven时,如果我们项目依赖了三方的包,那么我们需要在Pom中指定依赖的项目,那么我们有两种方式可以实现:
第一种:使用 MavenPublication 中的from components.java (java项目),components是一个集合,components.java类似一个Configuration
第二种:使用 MavenPublication pom.withXml

第一种方式

1
2
3
4
5
6
7
8
9
10
11
12
13
    
afterEvaluate {
publishing {
publications {
bundle(MavenPublication) {
pom components.debug
}
}
repositories {
mavenLocal()
}
}
}

第二种方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
publishing {
publications {
song(MavenPublication) {
artifactId = 'pom_demo'
pom.withXml {

org.gradle.api.artifacts.DependencySet dependenciesSet = project.getConfigurations().getByName('releaseRuntimeClasspath').getIncoming().getDependencies()
if (dependenciesSet.isEmpty()) {
return
}
Node dependenciesNode = it.asNode().appendNode('dependencies')
dependenciesSet.all {

if (it instanceof ModuleDependency) {
Node dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', it.group)
dependencyNode.appendNode('artifactId', it.name)
dependencyNode.appendNode('version', it.version)

if (!it.transitive) {
Node exclusionsNode = dependencyNode.appendNode('exclusions')
Node exclusionNode = exclusionsNode.appendNode('exclusion')
exclusionNode.appendNode('groupId', '*')
exclusion.appendNode('artifactId', '*')
} else if (!it.getExcludeRules().isEmpty()) {
Node exclusionsNode = dependencyNode.appendNode('exclusions')
for (org.gradle.api.artifacts.ExcludeRule rule : it.getExcludeRules()) {
Node exclusionNode = exclusionsNode.appendNode('exclusion')
exclusionNode.appendNode('groupId', rule.group)
exclusionNode.appendNode('artifactId', rule.module)
}
}
it.artifacts?.each {
if (it.type != null) {
dependencyNode.appendNode('type', it.type)
}
if (it.classifier != null) {
dependencyNode.appendNode('classifier', it.classifier)
}
}
}

}
}

}
}

repositories {
mavenLocal()
}
}