11

我有一个相当简单的 maven 化 Java 项目,但是我很难理解它。

我的父模块定义了许多我希望对几个子模块有用的 Java 类(和依赖项)。其中一个子模块专门用于部署 Web 应用程序,因此它需要一些额外的类(servlet)以及父模块中的所有内容。

文件结构如下所示

 - parent
   - src
   - pom.xml
   - child
     - src
     - pom.xml

我的父母 pom 看起来像这样:

<project>
  <groupId>my.group</groupId>
  <artifactId>parent</artifactId>
  <version>0.0.1</version>
  <packaging>pom</packaging>

  ...

  <modules>
    <module>child</module>
  </modules>
</project> 

孩子看起来像这样:

<project>
  <artifactId>child</artifactId>
  <packaging>war</packaging>
  <parent>
    <artifactId>parent</artifactId>
    <groupId>my.group</groupId>
    <version>0.0.1</version>
  </parent>

  ...

</project>

这就是我需要让孩子了解父级中定义的类和依赖项的全部内容吗?似乎不是:eclipse 给出了编译错误,并且从父文件夹或子文件夹运行mvn clean package会在任何时候提到父类的类时产生“找不到符号”消息。

我究竟做错了什么?

4

4 回答 4

17

我会像这样更改您的项目的结构:

  • 父母(pom)
    • 核心(jar,所有曾经在父级中的类)
    • 孩子(战争,取决于核心)

家长:

<project>
  <groupId>my.group</groupId>
  <artifactId>parent</artifactId>
  <version>0.0.1</version>
  <packaging>pom</packaging>

  <modules>
    <module>core</module>
    <module>child</module>
    <!-- possibly more modules... -->
  </modules>
</project>

核:

<project>
  <parent>
    <groupId>my.group</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.1</version>
  </parent>
  <artifactId>core</artifactId>
  <packaging>jar</packaging>
</project>

孩子:

<project>
  <parent>
    <groupId>my.group</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.1</version>
  </parent>
  <artifactId>module1</artifactId>
  <packaging>war</packaging>

  <dependencies>
    <dependency>
      <groupId>my.group</groupId>
      <artifactId>core</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>
</project>
于 2012-04-05T07:53:04.710 回答
4

由于您的父模块的包装是“pom”,因此不会提供任何 jar 文件,并且其他模块将无法访问其中的任何 .class 文件。尝试将其更改为“jar”并再试一次。

尽管将父母作为“罐子”并不是一个好习惯。我会坚持“pom”父母,可能会创建一个新的“核心”或“普通”孩子,让我的“战争”依赖它。

于 2012-04-05T07:40:38.373 回答
2

尝试在子模块 pom 中添加内部依赖,使其熟悉它的父模块

<dependency>
   <groupId>my.group</groupId>
   <artifactId>parent</artifactId>
   <version>0.0.1</version>
</dependency>
于 2012-04-05T07:40:34.097 回答
0

您应该做的第一件事是在您的父项的dependencyManagmeent块中定义您的依赖项,如下所示:

<dependencyManagement>
   <dependencies>
     <dependency>
       <groupId>group-a</groupId>
       <artifactId>artifact-a</artifactId>
       <version>1.0</version>
     </dependency>
     ...
   </dependencies>
</dependencyManagement>

此外,在您的孩子中,您应该说出您的孩子希望将哪个依赖项用作依赖项:

   <dependencies>
     <dependency>
       <groupId>group-a</groupId>
       <artifactId>artifact-a</artifactId>
       <!-- No version given. See dependencyManagement -->
     </dependency>
     ...
   </dependencies>
于 2012-04-05T07:42:06.927 回答