gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:40:51 26 4
gpt4 key购买 nike

给定一个要作为 JAR 发布的 Gradle Web 项目(以便它可以成为另一个具有不同发布周期的 Gradle Web 项目的依赖项)。

使用maven-publish插件:

apply plugin: 'war'
apply plugin: 'maven'
apply plugin: 'maven-publish'

Web 项目有一个 providedCompile 依赖项:

providedCompile 'javax.servlet:javax.servlet-api:3.0.1'

使用 mavenJava 发布 jar:

publishing {
publications {
// mavenJava publishes a jar file
mavenJava(MavenPublication) {
from components.java
}
}
repositories {
mavenLocal()
}
}

问题是 javax.servlet-api 在生成的 Maven POM 中有一个 runtime 范围:

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>runtime</scope>
</dependency>

运行时范围对于 servlet-api 来说没有任何意义,甚至是有害的。如何在 pom.xml 中将范围设置为 provided

最佳答案

借助 pom.withXml (请参阅此 Gradle sample ),可以将 Gradle 的 providedCompile 转换为 Maven 的 provided 范围聚甲醛:

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 部分的作用是遍历 Gradle 项目配置中 providedCompile 类型的所有依赖项,并更改要写入 Maven 的范围pom.xml运行时提供

生成的pom.xml现在具有为javax.servlet-api设置的provided范围:

<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>

关于maven - 如何使用提供的范围 maven 发布 Gradle 项目 JAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25201394/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com