2011-12-22 78 views
4

我有以下結構的項目:錯誤安裝一個多模塊原型與MVN原型創建:創建自項目

項目(POM)
項目的客戶端(模塊,JAR)
項目的EJB (模塊,JAR)
項目網站(模塊,戰爭)
項目耳(模塊,耳)

的POM裏面的模塊參考使用父:

<relativePath>../project</relativePath> 

而root pom以相同的方式引用模塊(使用../)。

我可以使用archetype創建一個原型:create-from-project,並且一切都運行平穩。

但是,當我嘗試安裝原型(MVN目標/生成的來源裏面安裝/原型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 

的問題是,該文件存在(這是目標/ generated-sources/archetype/src/main/resources/_ _ rootArtifactId _ _ client/pom.xml),我試圖擺弄archetype-metadata.xml沒有成功。任何線索?

在此先感謝

+0

同樣的問題給我。任何線索? – jmcollin92 2013-01-22 18:42:16

回答

1

它看起來像原型插件不支持多模塊項目佈局持平。如果這是您的情況,解決方法是更改​​爲嵌套佈局。我通過將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... 

然後您編輯原型-metadata.xml中的模塊的任何引用,去掉 '..' 相對路徑。

0

也有同樣的問題,這在Maven原型JIRA:http://jira.codehaus.org/browse/ARCHETYPE-422

在撰寫本文時,它仍然是開放的。

爲了得到我的項目的工作原型,我採用了jboss-javaee6-webapp-ear-blank-archetype-7.1.3.CR1.jar並使用它生成了一個項目。然後我修改了這個項目,因爲我們使用的是WebSphere,所以刪除了許多特定於jboss的項目。這些修改後,我從跑項目中創建:

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原型在命令行上同樣的錯誤:生成的,但我已經看到它發生)

出於某種原因,再次運行這些步驟並輸入不同的原型。artifactId在從項目創建時解決此問題。當原型得到更新,m2e不喜歡時,似乎有東西被破壞或更改。

無論如何,這可能值得一試。我會看看我是否可以縮小問題的範圍,但現在我將爲每次更新使用獨特的artifactIds。

0

只有使用Eclipse m2e插件時纔會出現此問題。 我使用下面的命令行能夠解決的問題:

mvn archetype:generate