如何在从原型

时间:2016-01-07 01:28:23

标签: java maven maven-2 maven-3 maven-archetype

我有一个用于创建新项目的原型。在项目创建时(即有人执行mvn archetype:generate时)我想将一些依赖项固定到当时可用的RELEASE版本(我强烈反对将<version>RELEASE</version>放在POM文件中) 。

我有没有办法让原型解决RELEASE版本并将其固定为某些库。

我现在解决这个问题的唯一方法就是每次发布一些核心库时发布新版本的原型,然后在archetype-resources/pom.xml

中编译那些版本的硬编码

我确实看到了几个类似的问题,但没有一个解决方案适合我。

正如我已经提到的那样,我希望在从archetype创建项目时固定最新版本。使用`RELEASE意味着我无法从相同的源代码重新创建二进制文件,因为我最终会获取不同版本的依赖项。

让我用具体的例子来解释。

  • 我有一个带有maven坐标com.my-company:my-awesome-framework:1.0的原型。
  • 我有一个带有maven坐标com.my-company:core-lib:1.0的图书馆。
  • Developer-1 运行命令mvn archeype:generate my-awesome-framework。他填写所需的详细信息并创建名为service-foo的项目。 service -foo具有依赖关系core-lib以及之后。
  • 我们向core-lib和发布版2.0
  • 添加了更多功能
  • 开发人员-1 构建service-foo它仍然使用core-lib版本1.0构建。 (因为他没有更改项目的POM文件的版本。我是否使用<version>RELEASE<version>用于&lt; core-lib , this time service-foo would have built with version 2.0 of the芯lib`)
  • Devloper-2 运行mvn archetype:generate my-awesome-framework。他填写必填字段并创建名为service-bar的服务。现在这次是core-lib版本2.0。请注意,我没有修改my-awesome-archetype来更新core-lib
  • archetype-resources\pom.xml的版本

我希望这能澄清我的用例

1 个答案:

答案 0 :(得分:0)

我使用archetype-post-generate.groovy脚本解决了这个问题。 Maven原型插件在创建项目后执行(如果可用)。那里可以使用Maven版本插件来更新到最新版本。

这是一个示例,您可以同时更新属性和父项目中的两个版本(在本例中为Spring Boot):

dir = new File(new File(request.outputDirectory), request.artifactId)

def run(String cmd) {
    def process = cmd.execute(null, dir)
    process.waitForProcessOutput((Appendable)System.out, System.err)
    if (process.exitValue() != 0) {
        throw new Exception("Command '$cmd' exited with code: ${process.exitValue()}")
    }
}

run("echo 'Updating to latest Vaadin version...'")
run("mvn versions:update-properties")

run("echo 'Updating to latest Spring Boot version...'")
run("mvn versions:update-parent")

缺点是Eclipse似乎不执行该脚本,但是在其他主要的IDE和命令行中,这项工作就可以了。

常规脚本形成了我的Vaadin + Spring Boot archetype in GitHub