Mar*_*idt 2 pom.xml maven gradle-2
给定一个要作为JAR发布的Gradle Web项目(以便它可以是另一个具有不同发布周期的Gradle Web项目的依赖项).
该maven-publish插件用于:
apply plugin: 'war'
apply plugin: 'maven'
apply plugin: 'maven-publish'
Run Code Online (Sandbox Code Playgroud)
Web项目具有providedCompile依赖性:
providedCompile 'javax.servlet:javax.servlet-api:3.0.1'
Run Code Online (Sandbox Code Playgroud)
'jar'使用mavenJava以下方式发布:
publishing {
publications {
// mavenJava publishes a jar file
mavenJava(MavenPublication) {
from components.java
}
}
repositories {
mavenLocal()
}
}
Run Code Online (Sandbox Code Playgroud)
问题是在结果Maven POM 中javax.servlet-api有一个runtime范围:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>runtime</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
运行时范围对servlet-api毫无意义,甚至是有害的.如何provided在pom.xml中设置范围?
在pom.withXml(参见本Gradle 示例)的帮助下,可以将Gradle providedCompile转换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()
}
}
Run Code Online (Sandbox Code Playgroud)
哪些pom.withXml部分不正在经历类型的所有依存关系providedCompile的摇篮项目配置中,改变的范围将被写入Maven的pom.xml,从runtime到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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2157 次 |
| 最近记录: |