Grale build.Gradle 到 Maven pom.xml

我有一个 Gradle 项目,我需要它的所有依赖转移和使用与另一个 Maven 项目。换句话说,我如何从 build.gradle 生成(或者可以生成) pom.xml?

117946 次浏览

最内置的解决方案可能是使用 Maven 插件中的 archiveTask任务,该任务将在构建目录中的 poms文件夹中生成一个 pom。http://www.gradle.org/docs/current/userguide/maven_plugin.html#sec:maven_pom_generation

从7级开始,当使用 Gradle 的 Maven-发布插件时,本地出版社出版会自动添加到您的任务中,并且调用其中任何一个都会生成一个 POM 文件。

所以如果你的 建造,分级文件是这样的:

plugins {
id 'java'
id 'maven-publish'
}


repositories {
mavenCentral()
}


dependencies {
implementation group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
runtimeOnly group: 'ch.qos.logback', name:'logback-classic', version:'1.2.3'
testImplementation group: 'junit', name: 'junit', version: '4.12'
}


// the GAV of the generated POM can be set here
publishing {
publications {
maven(MavenPublication) {
groupId = 'edu.bbte.gradleex.mavenplugin'
artifactId = 'gradleex-mavenplugin'
version = '1.0.0-SNAPSHOT'


from components.java
}
}
}

你可以在它的文件夹中调用 gradle publishToLocalRepo,你会在 建造/出版/专家的子文件夹中找到一个叫 Pom-default. xml的文件。此外,构建的 JAR 和 POM 将位于 Maven 本地回购中。如果您想省略发布到 Maven 本地回购,那么更确切地说,gradle generatePomFileForMavenPublication任务完成实际的生成。

请注意,并不是所有的依赖项都显示在这里,因为 Gradle“配置”并不总是与 Maven“作用域”一对一地映射。

因为我不想在我的本地回购中安装任何东西,所以在阅读完文档之后,我照做了。 加入你的构建,分级

apply plugin: 'maven'


group = 'com.company.root'
// artifactId is taken by default, from folder name
version = '0.0.1-SNAPSHOT'


task writeNewPom << {
pom {
project {
inceptionYear '2014'
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
distribution 'repo'
}
}
}
}.writeTo("pom.xml")
}

运行它 gradle writeNewPom

@ a _ horse _ with _ no _ name

使用 groovy 制作的 grale 可以尝试添加 在结束}项目块之后

build{
plugins{
plugin{
groupId 'org.apache.maven.plugins'
artifactId 'maven-compiler-plugin'
configuration{
source '1.8'
target '1.8'
}
}
}
}

没试过,胡乱猜的!

当你没有分级安装的时候,“写分级任务来做这个”就不是很有用了。我没有安装这个100MB 的依赖关系,而是使用过滤器将分级依赖关系转换为 maven 依赖关系:

cat build.gradle\
| awk '{$1=$1};1'\
| grep -i "compile "\
| sed -e "s/^compile //Ig" -e "s/^testCompile //Ig"\
| sed -e "s/\/\/.*//g"\
| sed -e "s/files(.*//g"\
| grep -v ^$\
| tr -d "'"\
| sed -e "s/\([-_[:alnum:]\.]*\):\([-_[:alnum:]\.]*\):\([-+_[:alnum:]\.]*\)/<dependency>\n\t<groupId>\1<\/groupId>\n\t<artifactId>\2<\/artifactId>\n\t<version>\3<\/version>\n<\/dependency>/g"

这个会转变

compile 'org.slf4j:slf4j-api:1.7.+'
compile 'ch.qos.logback:logback-classic:1.1.+'
compile 'commons-cli:commons-cli:1.3'

进入

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.+</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.+</version>
</dependency>
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.3</version>
</dependency>

Xml 的其余部分应该手工创建。

把这个添加到你的 build.gradle文件。我把它粘贴到我的结尾:

apply plugin: 'maven'
apply plugin: 'java'


task writeNewPom doLast {
pom {
project {
groupId 'org.example'
artifactId 'test'
version '1.0.0'
        

inceptionYear '2008'
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
distribution 'repo'
}
}
}
}.writeTo("$buildDir/newpom.xml")
}

然后根据具体情况运行以下命令

$ gradle writeNewPom

或者

$ /.gradlew writeNewPom

生成该文件并将其放入 $buildDir/newpom.xml中 从这个要点中截获了 < a href = “ https://gist.github.com/jmruc/5852692”rel = “ nofollow noReferrer”>