Maven中父标记的含义

时间:2011-12-07 18:48:09

标签: java 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

我的modP的pom.xml是:

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

我的C1的pom.xml是:

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

C2的pom.xml是:

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

我的问题是我可以使用AppC1.java中的ModP和ModC1和ModC2中的AppC2.java这样的配置引用AppP.java。

我试过这个,看起来这不起作用。我是否误解了pom.xml中父标记的含义?我需要在maven中做这样的功能吗?

我阅读了很多文档,但现在我比阅读之前更加困惑。 :(

每个答案都将受到高度赞赏。

由于

2 个答案:

答案 0 :(得分:12)

通常,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个项目保存在同一目录中,但其中一个是父项。这是有可能的,但我认为你对父母的pom的引用是错误的。点数为3,而应为1:

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

试试这个:

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

答案 1 :(得分:4)

由于ModP是一个pom(打包)项目,因此它不应包含任何Java代码。