Значение родительского тега в Maven - PullRequest
7 голосов
/ 07 декабря 2011

Я создал свой проект с такой же структурой, как в следующем фрагменте кода.

|-- modP

|   |-- pom.xml

|   |-- src

|   |   |-- main

|   |     `-- java

|   |         `-- com

|   |             `-- myorg

|   |                 `-- myapp

|   |                     `-- modP

|   |                         `-- AppP.java

|-- modC1

|   |-- pom.xml

|   |-- src

|   |   |-- main

|   |     `-- java

|   |         `-- com

|   |             `-- myorg

|   |                 `-- myapp

|   |                     `-- modC

|   |                         `-- AppM.java

|-- modC2

|   |-- pom.xml

|   |-- src

        |-- main

          `-- java

              `-- com

                  `-- myorg

                      `-- myapp

                          `-- modC2

                              `-- AppN.java

Мой pom.xml для modP:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org          /2001/XMLSchema-instance"

  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org    /xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>



  <groupId>com.myorg.myapp</groupId>

  <artifactId>modP</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <packaging>pom</packaging>



  <name>modP</name>

  <url>http://maven.apache.org</url>



  <properties>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

  </properties>



  <dependencies>

    <dependency>

      <groupId>junit</groupId>

      <artifactId>junit</artifactId>

      <version>3.8.1</version>

          <scope>test</scope>

    </dependency>

  </dependencies>

</project>

Мой pom.xml для C1:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org       /2001/XMLSchema-instance"

  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org    /xsd/maven-4.0.0.xsd">

<parent>

    <artifactId>modP</artifactId>

    <groupId>com.myorg.myapp</groupId>

    <version>0.0.1-SNAPSHOT</version>

    <relativePath>.../modP/pom.xml</relativePath>

</parent>

<modelVersion>4.0.0</modelVersion>



  <groupId>com.myorg.myapp</groupId>

  <artifactId>modC1</artifactId>

  <packaging>jar</packaging>



  <name>modC1</name>

  <url>http://maven.apache.org</url>

</project>

И pom.xml для C2:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org    /2001/XMLSchema-instance"

  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org    /xsd/maven-4.0.0.xsd">

<parent>

    <artifactId>modP</artifactId>

    <groupId>com.myorg.myapp</groupId>

    <version>0.0.1-SNAPSHOT</version>

    <relativePath>.../modP/pom.xml</relativePath>

</parent>

<modelVersion>4.0.0</modelVersion>



  <groupId>com.myorg.myapp</groupId>

  <artifactId>modC2</artifactId>

  <packaging>jar</packaging>



  <name>modC2</name>

  <url>http://maven.apache.org</url>

</project>

У меня вопрос, могу ли я использовать такую ​​ссылку конфигурации AppP.java из ModP в AppC1.java и AppC2.java в ModC1 и ModC2.

Я попробовал это, и похоже, что это не работает. Я неправильно понял значение родительского тега в pom.xml? Что мне нужно сделать в Maven для такой функции?

Я прочитал много документации, но теперь я еще больше запутался, чем до чтения. (

Каждый ответ будет высоко оценен.

Спасибо

Ответы [ 2 ]

12 голосов
/ 07 декабря 2011

Обычно иерархия проектов maven хранится в иерархической файловой системе. Дочерние проекты хранятся под родительским, то есть в ваших условиях:

modP
    pom.xml
    modC1
        pom.xml
    modC2
        pom.xml

Подпроекты могут иметь своих детей и т. Д.

Каждый проект, кроме вышестоящего, должен содержать определение типа

<parent>
    <groupId>com.company</groupId>
    <artifactId>parent-artifact-id</artifactId>
    <version>1.0</version>
</parent>

Каждый родительский модуль должен содержать список модулей:

<modules>
    <module>child1</module>     
    <module>child2</module>     
    <module>child3</module>     
</modules>

Насколько я понимаю, в вашем случае вы держите все 3 проекта в одном каталоге, но один из них является родительским. Это возможно, но я думаю, что вы ссылаетесь на родительскую поминку неверно. Количество точек равно 3, а должно быть 1:

<relativePath>.../modP/pom.xml</relativePath>

попробуйте это:

<relativePath>../modP/pom.xml</relativePath>

4 голосов
/ 07 декабря 2011

Поскольку ModP - это pom (пакетный) проект, он не должен содержать никакого кода Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...