2011-12-07 7 views
6

Stworzyłem mój projekt ze strukturą taką samą, jak w następnym fragmencie kodu.Znaczenie tagu nadrzędnego w Maven

|-- 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 

Moje pom.xml dla modp jest:

<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> 

Moje pom.xml dla C1 jest:

<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> 

I pom.xml dla C2 jest:

<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> 

Moje pytanie brzmi: czy mogę użyć takiego odniesienia do konfiguracji AppP.jav a od ModP w AppC1.java i AppC2.java w ModC1 i ModC2.

Próbowałem tego i wygląda na to, że to nie działa. Czy źle zrozumiałem znaczenie tagu nadrzędnego w pom.xml? Co muszę zrobić w tym celu?

Czytam dużo dokumentacji, ale teraz jestem jeszcze bardziej zdezorientowany niż przed czytaniem. :(

Każda odpowiedź będzie wysoko ceniona.

Dzięki

Odpowiedz

4

Od modp jest pom (opakowania) projekt, to nie powinien zawierać żadnego kodu Java.

12

Zazwyczaj projekty Maven hierarchia jest przechowywany w hierarchicznym systemie plików Projekty podrzędne są przechowywane w systemie nadrzędnym, tj. w Twoich warunkach:

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

Podprojekty mogą mieć własne dzieci n itp

Każdy projekt oprócz wyższego szczebla powinno się zawierać definicję jak

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

Każdy moduł rodzic powinien posiadać listę modułów:

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

O ile mi zrozumieć, w przypadku trzymasz wszystkie 3 projekty w tym samym katalogu, ale jeden z nich jest nadrzędny. Jest to możliwe, ale myślę, że twoje odniesienie do pom rodziców jest błędne. Liczba punktów wynosi 3, podczas gdy powinno być 1:

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

spróbować tego:

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

+0

Zrozumiałeś poprawnie. Wszystkie 3 projekty znajdują się w tym samym katalogu, a liczba kropek jest zgodna z poprawną dokumentacją. To, co Puce ma w tym przypadku. Nadrzędny pom.xml (projekt) nie powinien zawierać żadnego kodu. – Tiho