有没有办法运行 mvn archetype:generate 并以当前目录为目标,而不是从 artifactId 创建目录?该插件据说需要 basedir参数,但传入“-Dbasedir =”。行不通。
对于其他上下文,我有 2 个 Git 存储库设置。第一个包含用于生成自定义 Web 服务的 Maven 原型(prototype)的源代码,第二个是从原型(prototype)生成的示例服务。我有一份 Jenkins 工作,它通过运行“mvn clean install”来构建我的原型(prototype)。我正在尝试设置第二个 Jenkins 作业,作为我们 CI 工作流程的一部分,使用“mvn archetype:generate”生成测试服务,使用 mvn clean install 构建服务,启动服务,运行一些集成测试,然后推送如果测试通过,则将测试服务的源代码放入第二个存储库。两个 Jenkins 作业都使用 Maven 2/3 构建 job type ,并且我已经在作业配置的 SCM 部分指定了我们的 Git 存储库信息,因此作业从执行“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
黑客在那里是因为我不确定如何告诉原型(prototype)插件使用我的当前目录而不是创建一个带有 artifactId 名称的嵌套目录,所以我必须将所有内容移回我的本地存储库根目录并删除创建的目录。不是世界末日,但感觉很丑陋。请注意,除了我最初的问题的答案之外,我愿意接受有关如何更好地实现我的总体目标的建议。 :) 提前致谢!
最佳答案
如果没有某种解决方法,这是不可能的,原因有两个:
basedir
属性不起作用,请参阅 this issue .原型(prototype)插件始终将 artifactId 添加为最后一个子目录。你可以在 the sources 中看到这个.
你的选择
保持你的技巧,它并没有那么可怕;-)
项目位于存储库的根目录中重要吗?如果不只是做
cd <artifactId>
在构建/集成测试之前如果需要从存储库的根构建,则使用 pom 类型的根 pom.xml,将生成的项目作为子模块(我认为这是其他帖子建议的 #3)
提供 PR 以向 maven 原型(prototype)插件添加所需的功能,这可能需要一些时间,但可能是最干净的解决方案
关于java - 在同一目录中使用 Maven Archetype 生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24399613/