我有一个用于创建新项目的原型。在项目创建时(即有人执行mvn archetype:generate
时)我想将一些依赖项固定到当时可用的RELEASE
版本(我强烈反对将<version>RELEASE</version>
放在POM文件中) 。
我有没有办法让原型解决RELEASE
版本并将其固定为某些库。
我现在解决这个问题的唯一方法就是每次发布一些核心库时发布新版本的原型,然后在archetype-resources/pom.xml
我确实看到了几个类似的问题,但没有一个解决方案适合我。
正如我已经提到的那样,我希望在从archetype创建项目时固定最新版本。使用`RELEASE意味着我无法从相同的源代码重新创建二进制文件,因为我最终会获取不同版本的依赖项。
让我用具体的例子来解释。
com.my-company:my-awesome-framework:1.0
的原型。 com.my-company:core-lib:1.0
的图书馆。mvn archeype:generate my-awesome-framework
。他填写所需的详细信息并创建名为service-foo
的项目。 service -foo
具有依赖关系core-lib
以及之后。core-lib
和发布版2.0
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`)mvn archetype:generate my-awesome-framework
。他填写必填字段并创建名为service-bar
的服务。现在这次是core-lib
版本2.0
。请注意,我没有修改my-awesome-archetype
来更新core-lib
archetype-resources\pom.xml
的版本
我希望这能澄清我的用例
答案 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。