我创建的项目结构与下一段代码相同。
|-- 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中做这样的功能吗?
我阅读了很多文档,但现在我比阅读之前更加困惑。 :(
每个答案都将受到高度赞赏。
由于
答案 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代码。