Maven: Как я могу иметь модуль с одинаковым именем в двух разных модулях?

1

Рассмотрим эту структуру

project
       pom.xml
       component1/
                 pom.xml
                 persistence/pom.xml
                 business/pom.xml
                 rest/pom.xml
       component2/
                 pom.xml
                 persistence/pom.xml
                 business/pom.xml
                 rest/pom.xml

Когда я пытаюсь сделать это, я получаю NullPointerException

[ERROR] Internal error: java.lang.NullPointerException -> [Help 1]
org.apache.maven.InternalErrorException: Internal error: java.lang.NullPointerException
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:167)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:213)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:157)
    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:606)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: java.lang.NullPointerException
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:270)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:155)
    ... 11 more
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/InternalErrorException

Могу ли я иметь такую структуру? Я использую Maven 3.2.1

Вот как выглядит component2/pom.xml

<parent>
    <groupId>com.org</groupId>
    <artifactId>component2</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

<artifactId>persistence</artifactId>
<version>1.0-SNAPSHOT</version>

Это то же самое, что и component1/pom.xml кроме родительского

<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>com.org</groupId>
    <artifactId>component1</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>
<artifactId>persistence</artifactId>
<packaging>pom</packaging>

Когда я пытаюсь иметь другое имя модуля, оно работает

  • 0
    оба они имеют разные идентификаторы группы, верно?
  • 0
    Нет. Они не
Показать ещё 4 комментария
Теги:
maven

2 ответа

1
Лучший ответ

Как указано в @jigar-joshi, maven нуждается в способе различать модуль persistence component1 и модуль persistence component2. То, как это происходит, - это сочетание groupId и artifactId. Эта комбинация должна быть уникальной для каждого модуля persistence (или для business и rest в этом отношении).

Таким образом, каждая persistence должна иметь уникальную groupId (скажем com.org.component1 и com.org.component2) или уникальный artifactId (component1-persistence и component2-persistence).

0

Не только maven получает будет путать с фактическим расслоением вашего проекта, но в какой-то день вы потеряетесь с обоими модулями, и вы не будете знать, кто из них тот или иной.

Так как @Raghuram указал, вам понадобится уникальный идентификатор для каждого модуля, таким образом, имея уникальный уникальный идентификатор groupId или уникальный artifcatId (в рамках вашего проекта и даже с учетом других артефактов, или вы получите странные конфликты).

Это необходимо для уникальной цели, но некоторые соглашения должны соблюдаться, и вы автоматически получите свое "я" от любых проблем, которые могут быть вызваны именами модулей/проектов:

  • goupId: универсальный уникальный идентификатор для проекта. Это нормально использовать полное имя пакета, чтобы отличить его от других проектов с похожим именем (например, org.apache.maven).

  • artifactId: Идентификатор этого артефакта, который уникален в группе, заданной идентификатором группы.

Просто следуйте этим строкам, и вы даже не будете в безопасности, но создадите пакеты, соответствующие правилам практики.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню