【问题标题】:Can't use classes from different Maven modules不能使用来自不同 Maven 模块的类
【发布时间】:2014-01-27 04:44:49
【问题描述】:

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

例如:我在父母的 src/main/java 目录中有一个 ParentClaz,在孩子的 src/main/java 目录中有一个 ChildClaz。现在不可能在ChildClaz 中使用ParentClaz,反之亦然。

项目结构如下:

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

如何解决这个问题?

【问题讨论】:

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


    【解决方案1】:

    child 可以使用 parent 依赖,尝试添加到 parent

    <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);
        }
    }
    

    你会看到它编译了。

    【讨论】:

    • 问题是代码位于父 pom 模块中 :) 您无法将 pom 中的源代码附加到 jar 模块。
    • 您可以将代码作为 OP 放在父级中,但这在课程中没有用 :) 阅读问题:我有一个 ParentClaz 在我父母的 src/main/java dir 和 ChildClaz 在孩子的 src/main/java 目录中。
    【解决方案2】:

    你的父 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)
    

    【讨论】:

    • 所以你的意思是我应该将我的主项目声明为 jar/war 并制作一些 AdminPortal-parent 模块,其中包括 AdminPortal 和注册模块?
    • 是的,你的父 pom 可以有很多模块,比如 jar 和 war。您所有的源代码都应该位于模块中
    • 谢谢,我试试看。
    • 当然,我会在几分钟后将其标记为解决方案(系统不允许在 10-15 分钟后更快地选择正确答案)
    猜你喜欢
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多