当前位置: 首页 > 知识库问答 >
问题:

Gradle build.gradle to Maven pom.xml

颛孙信厚
2023-03-14

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

共有3个答案

鲁鹤轩
2023-03-14

当您没有安装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应该是手工创建的。

谷梁楚青
2023-03-14

因为我不想在我的本地回购中安装任何东西,所以在阅读文档之后,我做了下面的事情。添加您的版本。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 写新Pom

@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'
      }
    }
  }
}

没试过,胡猜!

慕容渊
2023-03-14

从Gradle 7开始,当使用Gradle的Maven-Publish插件时,publishToMavenLocal和publicall将自动添加到您的任务中,并且调用任何一个将始终生成POM文件。

因此,如果你的构建。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 = 'html" target="_blank">gradleex-mavenplugin'
            version = '1.0.0-SNAPSHOT'

            from components.java
        }
    }
}

您可以在其文件夹中调用<code>gradle publishToLocalRepo</code>并在build/publications/maven子文件夹中找到一个名为pom-default.xml的文件。此外,构建的JAR和POM将在您的Maven本地repo中。更确切地说,gradle-generatePomFileForMavenPublication任务执行实际生成,如果您想省略对Maven本地repo的发布。

请注意,并非所有依赖项都显示在此处,因为 Gradle“配置”并不总是使用 Maven “作用域”进行一对一映射。

 类似资料:

相关问答

相关文章

相关阅读