不能使用来自不同Maven模块的类

时间:2014-01-08 21:09:19

标签: java maven java-ee module pom.xml

需要创建一个由注册模块和主项目组成的多模块maven项目。问题是不可能使用在不同模块中声明的类。

例如:我父母的src / main / java目录中有一个ParentClaz,而孩子的src / main / java目录中有一个ChildClaz。目前,ParentClaz无法使用ChildClaz,反之亦然。

项目的结构如下:

+-- AdminPortal     <- parent root
   +-- registration <- child root
       -- pom.xml   <- child pom
   -- pom.xml       <- parent pom

我的AdminPortal POM:

<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>AdminPortal</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<name>AdminPortal</name>
<url>http://maven.apache.org</url>

<modules>
    <module>registration</module>
</modules>

这是孩子POM:

<modelVersion>4.0.0</modelVersion>

<parent>
    <groupId>com.example</groupId>
    <artifactId>AdminPortal</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

<groupId>com.example.AdminPortal</groupId>
<artifactId>registration</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>registration</name>
<url>http://maven.apache.org</url>

如何解决这个问题?

2 个答案:

答案 0 :(得分:6)

您的父pom包装类型为pom,而不是jar。这是特殊的聚合器模块。所有Java代码都应位于jar模块中。

包装类型为pom的模块无法生成jar,war或ear等文物。

Maven by Example - The Simple Parent Project

  

父项目不像以前的项目那样创建JAR或WAR;相反,它只是一个引用其他Maven项目的POM。

要使用其他模块中一个模块的类,请使用maven依赖。

典型项目如下所示:

* administration project (pom)
   * registration (jar)
   * portal (war)

答案 1 :(得分:0)

Child可以使用父依赖项,尝试将其添加到父

<dependencies>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.14</version>
    </dependency>
</dependencies>

并在小孩中创建此课程

import org.apache.log4j.Logger;

public class Test {
    public static void main(String[] args) {
        Logger.getLogger(Test.class);
    }
}

你将看到它编译。<​​/ p>