Gradle build.Gradle到Maven pom.xml

Gradle build.Gradle到Maven pom.xml,maven,gradle,pom.xml,Maven,Gradle,Pom.xml,我有一个Gradle项目,需要将其所有依赖项转移到另一个Maven项目中使用。换句话说,如何从build.gradle生成(或生成)pom.xml?最内置的解决方案可能是使用Maven插件中的archiveTask任务,该任务将在构建目录中的poms文件夹中生成pom 使用时,安装任务将自动添加到任务中,调用它将始终生成POM文件 因此,如果build.gradle文件如下所示: apply plugin: 'java' apply plugin: 'maven' group = 'my

我有一个Gradle项目,需要将其所有依赖项转移到另一个Maven项目中使用。换句话说,如何从build.gradle生成(或生成)pom.xml?

最内置的解决方案可能是使用Maven插件中的
archiveTask
任务,该任务将在构建目录中的
poms
文件夹中生成pom

使用时,安装任务将自动添加到任务中,调用它将始终生成POM文件

因此,如果build.gradle文件如下所示:

apply plugin: 'java'
apply plugin: 'maven'
   
group = 'myGroup'
// artifactId is taken by default, from folder name
version = '0.1-SNAPSHOT'
    
dependencies {
  compile 'commons-lang:commons-lang:2.3'
}

您可以在其文件夹中调用
gradle install
,您将在build/poms子文件夹中找到一个名为pom-default.xml的文件,该文件将包含依赖项。另外,构建的JAR和POM将在Maven本地repo中。

因为我不想在本地repo中安装任何东西,所以在阅读文档之后,我做了以下操作。 添加您的build.gradle

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时,“编写gradle任务来完成此任务”不是很有用。我没有使用dependecies安装这个100MB beast,而是使用过滤器将gradle依赖项转换为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"
进入


org.slf4j
slf4j api
1.7.+
回写
回归经典
1.1.+
commons cli
commons cli
1.3

pom.xml的其余部分应该手工创建。

这只会将jar写入pom,但不会创建一个包含项目源的完整项目。如何让maven插件也将源代码(以及文本、资源…)目录写入POM?这应该是生成POM并在本地安装工件的“官方”方式,尤其是当您转换大量基于POM的遗留模块项目时。看起来这段代码在web上被很好地复制,我想知道谁是转换gradle2maven或maven2gradle依赖项的原始作者。您可以使用此在线服务@YoandyPérezVillazón。它仅适用于maven2gradle,反之亦然?@IlyaYevlampiev抱歉,仅适用于mvn2gradle!我引用了maven插件,但没有
archiveTask
任务。
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>