当前位置: 首页 > 面试题库 >

如何使gradle在项目的根目录为Maven用户生成有效的pom.xml文件?

上官恩
2023-03-14
问题内容

虽然只有两天了,但是我肯定会在所有Java项目中都使用gradle,并从所有项目的根目录中删除pom.xml,这对我肯定是有利的。

但是,我希望保持与Maven兼容,就某种意义而言,我希望gradle任务能够在用户希望的项目根目录下生成合适的pom.xml。

目前,我对pom.xml的唯一引用是在build.gradle文件的这一部分中(只需进行很少的修改,就可以在这里找到):

uploadArchives {
    repositories {
        mavenDeployer {
            beforeDeployment {
                MavenDeployment deployment -> signing.signPom(deployment);
            }

            repository(url: sonatypeRepoURI) {
                authentication(userName: sonatypeUsername,
                    password: sonatypePassword);
            }

            pom.project {
                name "${name}";
                packaging "bundle";
                description "${description}";
                url "${projectURL}";

                scm {
                    url "${gitroscm}";
                    connection "${gitroscm}";
                    developerConnection "${gitrwscm}";
                }

                licenses {
                    license {
                        name "Lesser General Public License, version 3 or greater";
                        url "http://www.gnu.org/licenses/lgpl.html";
                        distribution "repo";
                    }
                }

                developers {
                    developer {
                        id "whocares";
                        name "whocares";
                        email "whocares";
                    }
                }
            }
        }
    }
}

我如何pom.project从这个非常深层的嵌套结构中提取出一个可以生成pom.xml的任务(默认情况下,生成的pom.xml在其中build/poms/pom- default.xml并且看起来还不错)?

更重要的是,是否有可能在仍可以引用的情况下将其提取pom.project出来uploadArchives

到build.gradle文件的完整链接:这里。


问题答案:

您可以使用gradle
maven插件
。这会将pom约定方法添加
到项目中,您可以在任务中使用该方法来生成pom.xml文件,例如

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("pom.xml")
    }
}

然后调用gradle createPom在项目根目录中生成pom.xml。在pom定义中的所有内容中,您应该真正提供groupIdartifactId并且version,其他类似的licenses对象并不是那么重要。

您还可以在此示例中查看具有某些依赖项的项目定义,然后尝试运行它以查看产生的结果。

添加了一些新关键字,并且不推荐使用某些技术。请检查



 类似资料:
  • 我有一个包含多个子项目的根项目。最初,我们将这些项目作为独立的Maven项目保留,但我意识到Gradle更适合我使用。但是对于其中一个子项目,我们宁可不将其转换为Gradle项目,而将其保留为Maven项目。 root/build.gradle root/common.gradle root/api/pom.xml

  • 我得到以下错误消息,同时添加m2e Maven与eclipse: 无法完成安装,因为找不到一个或多个必需项。正在安装的软件:用于Eclipse的m2e-Maven集成(包括孵化组件)1.6。1.20150625-2338(org.eclipse.m2e.feature.feature.group 1.6.1.20150625-2338)缺少要求:Maven POM XML编辑器1.6。1.2015

  • 我是Spring boot的新手,我认为这个问题非常基本。 我使用Spring Boot创建了一个应用程序,在开发环境中一切都很好。但当我将jar文件从目标目录复制到另一台机器并运行“java-jar”时,它不会呈现jsp页面,并出现以下错误: 当我将src文件夹从项目根目录复制到同一位置时,它工作正常。 似乎jar文件只是从项目的根目录工作。 这是我的配置: 和我的项目结构: 我在命令行运行以下

  • 我面临这个问题,我不知道该怎么办。我们将一个项目从git导入Intellij,当我们执行mvn clean install时,maven开始在项目根目录上创建所有依赖项文件夹。这只发生在我们的一台电脑上,我们不知道为什么: 你知道怎么解决这个问题吗?谢谢使用设置更新。xml Intellij

  • 我做了一个简单的项目,其中包含一些测试,我希望能够在其他计算机上启动测试。我使用runas构建了这个项目- 错误:在com类中找不到Main方法。实例TestPurchase,请将main方法定义为:publicstaticvoidmain(String[]args)或JavaFX应用程序类必须扩展JavaFX。应用应用 据我所知,TestNG不需要任何主方法,因为有注释。这就引出了一些问题: 我

  • 问题内容: 当我尝试使用生成Eclipse项目文件时,出现以下错误: 插件管理器中执行目标’org.apache.maven.plugins:maven-eclipse- plugin:2.9-SNAPSHOT:eclipse’的内部错误:无法加载mojo’org.apache.maven.plugins:maven- eclipse-plugin:插件``org .apache.maven.pl