我有一个相当简单的maven-ized 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 会在提到父类的任何时候产生“找不到符号”消息。
我做错了什么?
答案 0 :(得分:14)
我会改变你的项目结构:
父:
<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>
答案 1 :(得分:3)
由于您父模块的打包是“pom”,因此不会提供任何jar文件,其他模块也无法访问其中的.class文件。尝试将其更改为“jar”并再试一次。
虽然将父母视为“jar”并不是一个好习惯。我坚持“pom”的父母,可能会创建一个新的“核心”或“普通”孩子,让我的“战争”依赖于它。
答案 2 :(得分:1)
尝试在子模块pom中添加内部依赖项,因此熟悉其父模块
<dependency>
<groupId>my.group</groupId>
<artifactId>parent</artifactId>
<version>0.0.1</version>
</dependency>
答案 3 :(得分: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>