在同一目录中使用 Maven Archetype Generate

Tys*_*son 5 java git maven jenkins maven-archetype

有没有办法运行 mvn archetype:generate 并定位当前目录而不是从 artifactId 创建目录?该插件应该采用basedir参数,但传入“-Dbasedir=”。没有用。

对于其他上下文,我有 2 个 Git 存储库设置。第一个包含用于生成自定义 Web 服务的 Maven 原型的源,第二个是从原型生成的示例服务。我有一份 Jenkins 工作,它通过运行“mvn clean install”来构建我的原型。我正在尝试设置第二个 Jenkins 作业,作为我们 CI 工作流的一部分,使用“mvn archetype:generate”生成测试服务,使用 mvn clean install 构建服务,启动服务,运行一些集成测试,然后推送如果测试通过,则将测试服务的源放入第二个存储库。两个 Jenkins 作业都使用 Maven 2/3 构建作业类型,我已经在作业配置的 SCM 部分指定了我们的 Git 存储库信息,

对于第二份工作,我当前的工作流程如下所示:

// Clean out the existing source and commit locally.
git rm -r . 
git commit -m "Cleaning out previous version." .

// Generate the new source from the archetype.
mvn archetype:generate ...

// Big hack that I'd like to remove.
mv <artifactId>/* .
rm -rf <artifactId>

// Add the new generated source and commit locally.
git add -A .
git commit -m "Committing new version." .

// Build and test.
mvn integration-test

// Assuming that passed, commit the changes.
git push origin master
Run Code Online (Sandbox Code Playgroud)

hack 就在那里,因为我不确定如何告诉原型插件使用我的当前目录,而不是创建一个名为 artifactId 的嵌套目录,所以我必须将所有内容移回我的本地存储库根目录并删除创建的目录。不是世界末日,但感觉很丑陋。请注意,除了我最初的问题的答案之外,我还愿意接受有关如何更好地实现我的总体目标的建议。:) 提前致谢!

Fra*_*man 3

如果没有某种解决方法,这是不可能的,原因有两个:

  1. basedir属性不起作用,请参阅此问题

  2. archetype 插件始终将artifactId 添加为最后一个子目录。您可以在来源中看到这一点。

您的选择

  • 保留你的技巧,它并没有那么可怕;-)

  • 项目位于存储库的根目录中重要吗?如果不只是cd <artifactId>在构建/集成测试之前进行

  • 如果需要从存储库的根目录构建,则使用 pom 类型的根 pom.xml,并将生成的项目作为子模块(我认为这是其他帖子建议的 #3)

  • 提供 PR 以向 Maven 原型插件添加所需的功能,这可能需要一些时间,但可能是最干净的解决方案