Maven 在现有目录中生成原型

Posted

技术标签:

【中文标题】Maven 在现有目录中生成原型【英文标题】:Maven generate achetype in existed directory 【发布时间】:2014-10-25 08:32:08 【问题描述】:

我正在尝试使用现有目录(实际上来自 github 项目,它是空的并且仅包含 README 文件)创建空的 Maven Web 项目。

但 maven 似乎检测到目录存在并失败并出现错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:2.2:generate (default-cli) on project standalone-pom: Directory loms already exists - please run from a clean directory -> [Help 1]

是否有机会强制 maven 使用现有目录?

调用命令:

mvn archetype:generate -DgroupId=org.reaver.devs -DartifactId=loms -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

【问题讨论】:

为什么不在创建项目之前简单地删除该目录? @Seelenvirtuose 因为那个目录已经包含了.git 目录,我猜... 【参考方案1】:

由于该目录已经存在,maven 将无法生成另一个具有相同名称的工件项目。而且由于你的 loms 目录是一个 git 项目,并且不能删除它,你可以采取一个棘手的方法:

使用您想要的原型生成一个项目,但具有不同的工件名称(仅用作交换目录):

mvn archetype:generate -DgroupId=org.reaver.devs \
                       -DartifactId=loms-2 \
                       -DarchetypeGroupId=org.apache.maven.archetypes \
                       -DarchetypeArtifactId=maven-archetype-webapp \
                       -DinteractiveMode=false

上述命令将生成一个具有 maven 特性的新目录,它完全符合您对 loms 项目的期望,期待您的 pom.xml<artifactId> /em> 必须更新为 loms(请注意,我将使用命令行,但您可以使用任何可视化工具来更新文件):

vi pom.xml

删除artifactId 中的-2 后缀,使其匹配loms

loms-2/目录下的所有文件/文件夹复制到你的项目目录loms/

现在您的项目已初始化。

【讨论】:

好吧,我知道一些棘手的方法。实际上,如果将已经存在的 dir 重命名为 temp-name 并创建 loms 项目,那么合并后您确实不需要正确的 pom.xml。但问题是如何在没有技巧、仰卧起坐、黑客攻击的情况下做到这一点。 maven 的一些选项。 那么Maven没有选项了。【参考方案2】:

quickstart archetype 可以正常工作。它会发出警告,但随后会在现有目录(即与 artifactId 相同)内创建 pom.xml 和 maven src/ 目录结构。

它必须从 PARENT 目录运行。

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false

【讨论】:

以上是关于Maven 在现有目录中生成原型的主要内容,如果未能解决你的问题,请参考以下文章

多个动态原型单元的索引路径

部署原型工件时,Nexus Maven 原型存储库未更新

maven自定义骨架

Maven基础-02-笔记

Maven基础-02-笔记

Maven基础-02-笔记