关于publishing pre built jars to Maven from Gradle,Stackoverflow已经存在问题。但是,这略有不同:如何将预构建的Jar发布到Maven仓库,同时提供要包含在pom.xml文件中的依赖项?
我有一个正在这个脚本外部预建的jar。我需要将这个jar发布到我们的Maven repo(Nexus)并在pom.xml中指定依赖项。我已经能够使用工件闭包将一个预先构建的jar发布到Maven仓库,但它忽略了依赖关系。如果我添加java插件,那么Maven插件会创建一个带有依赖项的pom,但会上传一个零字节的jar文件。我想这是因为Java插件希望在src目录中编译和打包源代码,这在该项目中是不存在的。
有没有办法可以将预先构建的Jar“注入”Java插件流程,以便我可以将jar与依赖项一起上传?或者我错过了一些显而易见的事情?
当然最好的事情是预先构建的Jar的构建过程来概述其依赖关系并上传到Maven但不幸的是它是第三方软件而我们无法控制。
在脚本下面发布一个零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"
}
}
}
非常感谢!罗布
答案 0 :(得分:2)
我们可以使用Java插件和maven-publish插件使用Gradle将预先构建的jar发布到Maven仓库中。 maven-publish有一个功能,可以使用pom.withXml块将依赖项注入生成的pom中。
我将给出一个示例build.gradle文件,该文件生成具有指定依赖关系的预构建工件的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>
我想这可能会回答你的问题