我有一个具有以下结构的项目:
项目(pom)在pom内部,模块使用以下方式引用父级:
<relativePath>../project</relativePath>
根pom以相同的方式引用模块(使用../).
我可以使用archetype创建一个原型:create-from-project,一切运行顺畅。
但是当我尝试安装archetype(mvn install在target / generated-sources / archetype dir中)时,我收到错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:2.2:integration-test (default-integration-test) on project seguranca-archetype:
[ERROR] Archetype IT 'basic' failed: org.apache.maven.archetype.exception.ArchetypeGenerationFailure: Error merging velocity templates: Unable to find resource 'archetype-resources/../__rootArtifactId__-client/pom.xml'
[ERROR] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:2.2:integration-test (default-integration-test) on project seguranca-archetype:
Archetype IT 'basic' failed: org.apache.maven.archetype.exception.ArchetypeGenerationFailure: Error merging velocity templates: Unable to find resource 'archetype-resources/../__rootArtifactId__-client/pom.xml'
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:319)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Caused by: org.apache.maven.plugin.MojoExecutionException:
Archetype IT 'basic' failed: org.apache.maven.archetype.exception.ArchetypeGenerationFailure: Error merging velocity templates: Unable to find resource 'archetype-resources/../__rootArtifactId__-client/pom.xml'
at org.apache.maven.archetype.mojos.IntegrationTestMojo.execute(IntegrationTestMojo.java:268)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
... 19 more
问题是该文件存在(它位于target / generated-sources / archetype / src / main / resources / __ rootArtifactId__client / pom.xml),我试图摆弄archetype-metadata.xml但没有成功。有线索吗?
提前致谢
答案 0 :(得分:1)
看起来archetype插件不支持多模块项目的平面布局。如果是这种情况,则解决方法是更改为嵌套布局。我是通过将archetype-resources目录之外的模块移入其中来实现的。像这样:
在:
pom.xml
src
├── main
│ └── resources
│ ├── archetype-resources
│ │ └── pom.xml
│ ├── META-INF
│ │ └── maven
│ │ └── archetype-metadata.xml
│ ├── __rootArtifactId__.module1
│ │ ├── pom.xml
│ │ └── ...
│ ├── __rootArtifactId__.module2
│ │ ├── pom.xml
│ │ └── ...
│ ├── __rootArtifactId__.module3
│ ├── pom.xml
│ └── ...
│
└── test
└── resources
└── projects...
后:
pom.xml
src
├── main
│ └── resources
│ ├── archetype-resources
│ │ ├── pom.xml
│ │ ├── __rootArtifactId__.module1
│ │ │ ├── pom.xml
│ │ │ └── ...
│ │ ├── __rootArtifactId__.module2
│ │ │ ├── pom.xml
│ │ │ └── ...
│ │ └── __rootArtifactId__.module3
│ │ ├── pom.xml
│ │ └── ...
│ └── META-INF
│ └── maven
│ └── archetype-metadata.xml
└── test
└── resources
└── projects...
然后编辑对archetype-metadata.xml中模块的任何引用,删除&#39; ..&#39;相对路径。
答案 1 :(得分:0)
Maven Archetype JIRA中存在类似的问题:http://jira.codehaus.org/browse/ARCHETYPE-422
在撰写本文时,它仍然是开放的。
为了获得我的项目的工作原型,我采用了jboss-javaee6-webapp-ear-blank-archetype-7.1.3.CR1.jar并使用它生成了一个项目。然后我修改了项目以删除许多特定于jboss的项目,因为我们使用的是WebSphere。在这些修改之后,我运行了来自项目的创建:
mvn clean archetype:create-from-project -Dinteractive=true
我修改了archetype.groupId和archetype.artifactId以设置我希望原型最终在存储库中的位置及其名称。我还修改了包值,但接受其他项的默认值。
就像你经历的那样,这似乎运行良好。当我cd到\ target \ generated-sources \ archetype并运行mvn install时,将使用适当的路径和名称创建jar文件。
然后我使用Eclipse生成一个项目,这也很好。太好了吧?
因此,我做了一些小的更改,以更具体地了解我们的环境,并使用相同的组和工件ID执行上述步骤。然后我使用Eclipse生成一个项目,它给出了错误:
org.apache.maven.archetype.exception.ArchetypeGenerationFailure: Error merging velocity templates: Unable to find resource 'archetype-resources/pom.xml'
(我不会在mvn archetype:generate的命令行上始终得到相同的错误,但我已经看到它发生了。)
出于某种原因,在从项目创建时,再次执行这些步骤并输入不同的archetype.artifactId可以解决此问题。当原型更新为m2e不喜欢时,似乎会出现损坏或更改的内容。
无论如何,这可能值得一试。我将看看是否可以缩小问题范围,但是现在我将为每次更新使用唯一的artifactIds。
答案 2 :(得分:0)
只有在使用Eclipse m2e
插件时才会出现问题。
我能够使用以下命令行解决问题:
mvn archetype:generate