如何使用提供的范围maven发布Gradle项目JAR

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中设置范围?

Mar*_*idt 5

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,从runtimeprovided.

现在生成pom.xmlprovided范围设置为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)