Ошибка при установке многомодульного архетипа, созданного с помощью mvn archetype: create-from-project - PullRequest
4 голосов
/ 23 декабря 2011

У меня есть проект со следующей структурой:

проект (пом)
проект-клиент (модуль, банка)
Project-EJB (модуль, банка)
Project-Web (модуль, война)
Project-ear (модуль, ухо)

Внутри модуля модули ссылаются на родителя, используя:

<relativePath>../project</relativePath>

И корневая помпа ссылается на модули одинаково (используя ../).

Я могу создать архетип, используя archetype: create-from-project, и все пройдет гладко.

Но когда я пытаюсь установить архетип (mvn install внутри директории target / generate-sources / archetype), я получаю сообщение об ошибке:

    [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 / generate-sources / archetype / src / main / resources / __ rootArtifactId__client / pom.xml), и я попытался поиграться с файлом archetype-metadata.xml безуспешно. Любые подсказки?

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 16 декабря 2013

Похоже, что плагин 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, удаляя относительный путь '..'.

0 голосов
/ 23 октября 2013

Проблема возникает только при использовании плагина Eclipse m2e. Мне удалось решить проблему с помощью следующей командной строки:

mvn archetype:generate
0 голосов
/ 22 марта 2013

Существует похожая проблема в Maven Archetype JIRA: http://jira.codehaus.org/browse/ARCHETYPE-422

На момент написания статьи оно остается открытым.

Чтобы получить работающий архетип для моего проекта, я взял jboss-javaee6-webapp-ear-blank-archetype-7.1.3.CR1.jar и сгенерировал проект, используя его. Затем я изменил проект, чтобы удалить многие элементы, специфичные для jboss, поскольку мы используем WebSphere. После этих изменений я запускаю команду create from project:

mvn clean archetype:create-from-project -Dinteractive=true

Я изменяю archetype.groupId и archetype.artifactId, чтобы указать расположение, в котором архетип должен находиться в хранилище, и его имя. Я также изменяю значение пакета, но принимаю значения по умолчанию для других элементов.

Так же, как вы испытали это, кажется, работает нормально. Когда я перехожу к \ target \ generate-sources \ archetype и запускаю mvn install, создается файл jar с соответствующим путем и именем.

Затем я использую Eclipse для генерации проекта, и это тоже хорошо работает. Отлично, правда?

Поэтому я делаю небольшие изменения, чтобы они были более специфичными для нашей среды, и выполняю описанные выше шаги, используя те же идентификаторы группы и артефакта. Затем я использую 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 не нравится.

В любом случае, возможно, стоит попробовать. Я посмотрю, смогу ли я сузить проблему, но сейчас я буду использовать уникальные артефакты для каждого обновления.

...