gpt4 book ai didi

maven - 我可以使用要部署到 Nexus 的 Gradle maven 插件创建仅 Maven POM (BOM) 构建吗?

转载 作者:行者123 更新时间:2023-12-03 02:44:37 25 4
gpt4 key购买 nike

我有一个使用 Spring's dependency management plugin 的 Gradle 项目定义依赖版本列表。我也在使用 Maven plugin将项目部署到 Maven 存储库。

我希望能够将其部署为 Maven Material list (BOM),以便我可以在其他 Gradle 项目中使用它来定义我的依赖版本。只要我还部署了一个 JAR 文件,我就能够让它工作。但是,JAR 完全是空的和多余的。我的目标是只生成和部署 POM 文件,就像我可以做的那样,如果这是一个带有“pom”包装的 Maven 项目。

如果我从要发布的 Artifact 列表中手动排除 JAR,则不会安装任何内容,甚至不会安装 POM 文件。

这是一个测试版本,用于演示该问题:

group 'test'
version '1.0.0-SNAPSHOT'

buildscript {
repositories {
mavenCentral()

}
dependencies {
classpath 'org.springframework.boot:spring-boot-gradle-plugin:1.5.1.RELEASE' //Matches the Spring IO version
}
}

apply plugin: 'java'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'maven'

dependencyManagement {
dependencies {
dependency 'cglib:cglib-nodep:3.2.4'
dependency 'junit:junit:4.12'
}
}

////Uncommenting this causes nothing at all to be deployed:
//jar.enabled = false
//configurations.archives.artifacts.with { archives ->
// archives.removeAll { it.type == 'jar' }
//}

以上正确生成以下 POM 文件并将其安装到我的本地 Maven 存储库中:
<?xml version="1.0" encoding="UTF-8"?>
<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>
<groupId>test</groupId>
<artifactId>gradle-pom-packaging-test</artifactId>
<version>1.0.0-SNAPSHOT</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>3.2.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>

但是,它还会安装一个 JAR 文件,该文件为 MANIFEST.MF 文件保存为空。

我能够使用 maven-publish 成功地完成这项工作插入。但是,我也在使用 Gradle Sonatype Nexus plugin将 Artifact 发布到 Nexus 实例。因为这是建立在 maven 之上的插件, maven-publish插件不能满足我的需求。以下是我需要添加的所有内容才能使其与 maven-publish 一起使用插入:
apply plugin: 'maven-publish'
publishing {
publications {
maven(MavenPublication) {
}
}
}

有没有办法使用 maven 生成和部署 POM 文件? Gradle 插件,如果这是一个带有“pom”包装的 Maven 项目,我可以这样做吗?

最佳答案

在 Gradle 6+ 版本中,我们可以使用 Gradle Java Platform Plugin发布一个没有很多配置和脚本的 maven-bom。

group 'test.platform.simple.bom'
version '1.0.0-SNAPSHOT'

repositories {
maven {
mavenCentral()
}
}

apply plugin: 'java-platform'
apply plugin: 'maven-publish'

javaPlatform {
allowDependencies()
}

dependencies {
constraints {
api 'junit:junit:4.12'
api 'cglib:cglib-nodep:3.2.4'
// runtime 'org.postgresql:postgresql:42.2.5' <-- runtime constraint
// api project(":core") <-- constraint from local project
}

// api platform('com.fasterxml.jackson:jackson-bom:2.9.8') <-- constraint from another platform
}

publishing {
publications {
maven(MavenPublication) {
from components.javaPlatform
}
}
}
要管理的依赖可以在dependencies下定义为 api or runtime constraints . 约束 可用于管理依赖项 from a local project以及 from another platform/bom .请注意,我们需要配置一个使用 javaPlatform 的 Maven 发布。组件以将其发布为 maven bom Artifact 。

关于maven - 我可以使用要部署到 Nexus 的 Gradle maven 插件创建仅 Maven POM (BOM) 构建吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43374613/

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