在已存在的目录中生成Maven原型

8

我试图使用现有的文件夹(实际上是从 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
1
@Seelenvirtuose 因为该目录已经包含 .git 目录,我猜... - Riduidel
4个回答

1

quickstart archetype 可以很好地完成这项任务。它会发出警告,但随后会在现有目录(即与 artifactId 相同的目录)内创建 pom.xml 文件和 Maven src/ 目录结构。

必须从父级目录运行。

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

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
tree loms

结果:

loms
├── pom.xml
├── README.md
└── src
    └── main
        └── webapp
            ├── index.jsp
            └── WEB-INF
                └── web.xml

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/中。

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


我知道一些巧妙的方法。实际上,如果将已存在的目录重命名为临时名称并创建Loms项目,则在合并后您确实不需要正确的pom.xml。但问题是如何在没有技巧、压缩和黑客攻击的情况下完成它。这是Maven的一些选项。 - M_F
那么Maven就没有选项了。 - tmarwen

0
今天我尝试做同样的事情。我发现以下内容适用于我的用例,其中a)远程存储库始终使用仅包含基本README.mdmain分支创建,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
  • 前两个命令很简单,用于向空的远程存储库推送。
  • fetch 检索到 origin/main 的引用。
  • 如果 master 是有效名称,则重命名可能是不必要的。如果远程分支也被称为 master,我不知道这是如何工作的。
  • add 和 commit 也很简单。
  • rebase 有利于新创建的分支解决冲突,换句话说就是原型创建的内容。

之后,我可以添加更多的提交,或者推送并让 PR 如原样完成。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接