我正在尝试使用现有目录创建空的 Maven Web 项目(实际上来自 github 项目,它是空的,仅包含 README 文件)。
但是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
快速入门原型非常适合于此。它会发出警告,但随后会在现有目录中创建 pom.xml 和 maven
src/
目录结构(即与artifactId 相同)。
它必须从 PARENT 目录运行。
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
由于该目录已经存在,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>
必须更新为 loms (请注意,我将使用命令行,但您可以使用任何可视化工具来更新文件):
vi pom.xml
删除 artifactId
中的
-2后缀,使其匹配 loms。
将loms-2/目录下的所有文件/文件夹复制到您的项目目录loms/。
现在您的项目已初始化。
今天我也尝试做同样的事情。我发现以下内容适用于我的用例,其中 a) 远程存储库始终使用仅包含基本
main
的 README.md
分支创建,b) 我们对所有内容都使用 PR,甚至是第一次实际提交。
使用原型创建文件夹后,我在新创建的文件夹中执行以下命令:
git init
git remote add origin <url>
git fetch origin
git branch -m feature/setup
git add .
git commit -m "Initial setup"
git rebase -Xtheirs origin/main
origin/main
的引用。master
是有效名称,则可能不需要重命名。如果远程分支也称为 master
,我不知道这是如何工作的。在此之后,我可以添加更多提交,或推送并让 PR 按原样完成。
如果添加
archetypeGroupId
属性,您的调用将会起作用。
mkdir loms
echo hi >loms/README.md
mvn archetype:generate \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-webapp \
-DgroupId=org.reaver.devs -DartifactId=loms \
-DinteractiveMode=false -Dpackage=com.example -DoutputDirectory=../
tree loms
结果:
loms
├── pom.xml
├── README.md
└── src
└── main
└── webapp
├── index.jsp
└── WEB-INF
└── web.xml
但我无法解释为什么添加
archetypeGroupId
属性可以解决此问题。不过它确实有效。