gpt4 book ai didi

maven - Gradle:将预构建的 jar 发布到具有依赖项的 Maven 存储库

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

Stackoverflow 上已经有关于 publishing pre built jars to Maven from Gradle 的问题.但是,这略有不同:如何将预构建的 Jar 发布到 Maven 存储库,同时提供要包含在 pom.xml 文件中的依赖项?

我有一个在这个脚本外部预构建的 jar。我需要将此 jar 发布到我们的 Maven 存储库 (Nexus) 并在 pom.xml 中指定依赖项。我已经能够使用 artifacts 闭包将预构建的 jar 发布到 Maven 存储库,但它忽略了 dependencies 闭包。如果我添加 java 插件,那么 Maven 插件会创建一个具有依赖项的 pom,但会上传一个零字节 jar 文件。我猜这是因为 Java 插件希望在 src 目录中编译和打包源代码,而该目录在该项目中不存在。

有没有一种方法可以将预构建的 Jar“注入(inject)”到 Java 插件进程中,以便我可以将 jar 与依赖项一起上传?还是我遗漏了其他明显的东西?

当然,最好的办法是让预构建的 Jar 构建过程概述其依赖关系并上传到 Maven,但不幸的是,它是第 3 方软件,我们无法控制。

下面的脚本发布了一个零 kb 的 jar 文件...

apply plugin: 'java'
apply plugin: 'maven'
jar = file(projectHome + '/build/lib').listFiles()[0]
configurations {
archives
runtime
}
dependencies {
runtime 'org.apache.tika:tika-app:1.3'
}
artifacts {
archives jar
}
uploadArchives {
repositories {
mavenDeployer {
repository(url: "http://build.com/nexus/content/repositories/releases/")
pom.version = tag
pom.artifactId = "artifact"
pom.groupId = "group"
}
}
}

非常感谢!罗布

最佳答案

我们可以使用 Gradle 使用 java 插件和 maven-publish 插件将预构建的 jar 发布到 Maven 存储库中。 maven-publish 具有使用 pom.withXml block 将依赖项注入(inject)生成的 pom 的功能。

我在此提供了一个示例 build.gradle 文件,该文件生成具有指定依赖项的预构建 Artifact 的 pom.xml。您可以尝试这个建议,如下所示。

apply plugin: "maven-publish"
apply plugin: "java"



dependencies {
compile "dependency:antlr:2.7.7"
compile "dependency:commons-beanutils:1.9.3"
compile "dependency:dom4j:1.6.1"
compile "dependency:jettison:1.3.8"
}

publishing {

repositories {
maven {
url "$mavenUrl"
credentials {
username = "$mavenUser"
password = "$mavenPwd"

}
}
}
publications {
maven(MavenPublication) {
groupId "test"
artifactId "myArtifact"
version "1.0"
artifact ("/scratch/test/jars/myArtifact.jar")
pom.withXml {
def dependencies = asNode().appendNode("dependencies")
configurations.compile.allDependencies.each { dep ->
def depNode = dependencies.appendNode("dependency")
depNode.appendNode("groupId", dep.group)
depNode.appendNode("artifactId", dep.name)
depNode.appendNode("version", dep.version)
}
}
}
}
}

生成的 pom 如下所示。

<?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>myArtifact</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>dependency</groupId>
<artifactId>antlr</artifactId>
<version>2.7.7</version>
</dependency>
<dependency>
<groupId>dependency</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.3</version>
</dependency>
<dependency>
<groupId>dependency</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>dependency</groupId>
<artifactId>jettison</artifactId>
<version>1.3.8</version>
</dependency>
</dependencies>
</project>

我想这可能会回答你的问题

关于maven - Gradle:将预构建的 jar 发布到具有依赖项的 Maven 存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18091054/

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