Gradle build.gradle 到 Maven pom.xml

Posted

技术标签:

【中文标题】Gradle build.gradle 到 Maven pom.xml【英文标题】:Gradle build.gradle to Maven pom.xml 【发布时间】:2012-10-05 00:08:27 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

我引用了 maven 插件,但没有 archiveTask 任务。【参考方案2】:

从 Gradle 7 开始,当使用 Gradle's Maven-Publish plugin 时,publishToMavenLocalpublish 会自动添加到您的任务中,调用其中任何一个都会生成 POM 文件。

所以如果你的 build.gradle 文件看起来像这样:

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,您会在build/publications/maven 子文件夹中找到一个名为pom-default.xml 的文件。此外,与 POM 一起构建的 JAR 将位于您的 Maven 本地存储库中。更确切地说,gradle generatePomFileForMavenPublication 任务会执行实际生成,如果您想省略发布到 Maven 本地存储库。

请注意,并非所有依赖项都显示在此处,因为 Gradle“配置”并不总是与 Maven“范围”一一对应。

【讨论】:

这应该是生成 POM 并在本地安装工件的“官方”方式,尤其是在转换一堆基于 POM 的遗留模块项目时。 看来这个sn-p的代码在网上被很好地复制了,不知道原作者是谁dzone.com/articles/… 从 Gradle 7.x 开始,maven plugin has been removed。应该改用maven-publish @pirateofebay 真的,谢谢。调整答案以反映新语法。【参考方案3】:

由于我不想在本地存储库中安装任何东西,所以我在阅读文档后做了以下操作。 添加你的 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 writeNewPom

@a_horse_with_no_name

用groovy制作的gradle可以尝试添加 结束 项目块后

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

没试过,瞎猜!

【讨论】:

这只会将 JAR 写入 POM,但不会创建包含项目源代码的完整项目。如何让 maven 插件也将源(和文本、资源...)目录写入 POM?【参考方案4】:

当您没有安装 gradle 时,“编写 gradle 任务来执行此操作”不是很有用。我没有使用依赖项安装这个 100MB 的野兽,而是制作了将 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"

这会转化

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>

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

【讨论】:

要转换 gradle2maven 或 maven2gradle 依赖,你可以使用这个在线服务sagioto.github.io/maven2gradle @YoandyPérezVillazón 它仅适用于 maven2gradle,反之亦然? @IlyaYevlampiev 对不起,只有 mvn2gradle !

以上是关于Gradle build.gradle 到 Maven pom.xml的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin基础从入门到进阶系列讲解(基础教程篇)详解build.gradle文件

gradle build 未检测到 build.gradle 中的 android ndkVersion

build.gradle(项目)和 build.gradle(模块)之间的区别

Gradle build.gradle 到 Maven pom.xml

将 maven 存储库添加到 build.gradle

Android Studio 将外部项目添加到 build.gradle