给定一个要作为 JAR 发布的 Gradle Web 项目(以便它可以成为另一个具有不同发布周期的 Gradle Web 项目的依赖项)。
The maven-publish
使用插件:
apply plugin: 'war'
apply plugin: 'maven'
apply plugin: 'maven-publish'
该网络项目有一个providedCompile
依赖性:
providedCompile 'javax.servlet:javax.servlet-api:3.0.1'
A jar
发布使用mavenJava
:
publishing {
publications {
// mavenJava publishes a jar file
mavenJava(MavenPublication) {
from components.java
}
}
repositories {
mavenLocal()
}
}
问题是javax.servlet-api
has a runtime
生成的 Maven POM 中的范围:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>runtime</scope>
</dependency>
运行时范围对于 servlet-api 来说没有任何意义,甚至是有害的。范围如何设置为provided
在 pom.xml 中?
在...的帮助下pom.withXml
(参见这个摇篮sample https://github.com/gradle/gradle/blob/master/subprojects/docs/src/samples/maven-publish/pomCustomization/build.gradle)可以改变 Gradle 的providedCompile
into provided
Maven POM 的范围:
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
// providedCompile -> provided scope
pom.withXml {
asNode().dependencies.'*'.findAll() {
it.scope.text() == 'runtime' && project.configurations.providedCompile.allDependencies.find { dep ->
dep.name == it.artifactId.text()
}
}.each() {
it.scope*.value = 'provided'
}
}
}
}
repositories {
mavenLocal()
}
}
什么是pom.withXml
部分所做的是遍历类型的所有依赖项providedCompile
在 Gradle 项目配置中并更改要写入 Maven 的范围pom.xml
from runtime
to provided
.
生成的pom.xml
现在有provided
设定的范围为javax.servlet-api
:
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
[...]
<dependencies>
[...]
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)