Maven 在现有目录中生成 achetype

问题描述 投票:0回答:4

我正在尝试使用现有目录创建空的 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
java maven maven-3 pom.xml maven-archetype
4个回答
1
投票

快速入门原型非常适合于此。它会发出警告,但随后会在现有目录中创建 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

0
投票

由于该目录已经存在,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/

  • 现在您的项目已初始化。


0
投票

今天我也尝试做同样的事情。我发现以下内容适用于我的用例,其中 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 按原样完成。


0
投票

如果添加

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
属性可以解决此问题。不过它确实有效。

© www.soinside.com 2019 - 2024. All rights reserved.