我开始学习maven,现在我正在尝试用简单的开始做一些真实世界的项目。也许它在这里看起来很简单但我真的很困惑,如果我想同时打包父项目和子项目,我该怎么办。
(PS:我正在使用intellij idea btw)
这是我的配置
项目A
项目B
项目C
当我将项目A的打包属性设置为jar时,它给出了一个错误,基本上说“如果它在父pom中,你必须将打包元素设置为pom”。但我知道,如果我将包装元素设置为pom,它就不会创建包。
所以我决定创建另一个项目作为多模块来管理包装问题,但不知道如何!我怎么能同时为每个文件生成jar文件?
编辑 - 这就是我发布的
MODULE POM
<?xml version="1.0" encoding="UTF-8"?>
<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.deneme.module</groupId>
<artifactId>ModuleGroup</artifactId>
<packaging>pom</packaging>
<version>1.0.1</version>
<modules>
<module>A</module>
<module>B</module>
</modules>
</project>
项目A
<?xml version="1.0" encoding="UTF-8"?>
<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.mg.A</groupId>
<artifactId>A</artifactId>
<version>1.0.2</version>
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.3</version>
</dependency>
</dependencies>
</project>
项目B
<?xml version="1.0" encoding="UTF-8"?>
<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>
<packaging>jar</packaging>
<parent>
<artifactId>A</artifactId>
<groupId>com.mg.A</groupId>
<version>1.0.2</version>
<relativePath>../A/pom.xml</relativePath>
</parent>
<groupId>com.mg.B</groupId>
<artifactId>B</artifactId>
<version>1.0.1</version>
</project>
答案 0 :(得分:2)
如果项目A将B和C声明为模块,则必须将打包元素设置为pom。它还意味着它不应包含任何代码,并且不会自行生成工件。它只是一种将项目分组在一起的方式。
在maven中,父pom用于定义将由所有子项目继承的公共配置(属性等)。
在你的情况下,我猜你需要一个包含3个孩子的父项目(pom包装):A,B和C:
parentProject
* module A
* module B
* module C
在parentProject上运行mvn install时,将构建所有子模块并生成相应的jar(例如A.jar,B.jar和C.jar)。
请注意,您不需要在子pom中声明父元素来实现此结果,您只需要将它们声明为父pom中的模块,这称为项目聚合。声明子项中的父项称为项目继承。您可以查看以下文档以获取更多详细信息:
答案 1 :(得分:1)
我认为你混淆了继承和依赖。
继承:子pom继承所有值,例如属性,groupId,版本和依赖项。通常,您不应在父poms
中使用依赖项依赖:pom依赖于其他jar / pom并使用它的内容并使用/依赖于传递依赖
据我所知,您有以下问题:
我建议您使用目录结构:
Workspace
|- ModuleProject
|- ProjectA
|- ProjectB
\- ProjectC
并且poms看起来像这样(标题剥离):
模块pom:
<groupId>com.deneme.projectname</groupId>
<artifactId>ModuleGroup</artifactId>
<packaging>pom</packaging>
<version>1.0.1</version>
<modules>
<module>../ProjectA</module>
<module>../ProjectB</module>
<module>../ProjectC</module>
</modules>
项目A:
<parent>
<groupId>com.deneme.projectname</groupId>
<artifactId>ModuleGroup</artifactId>
<version>1.0.1</version>
<relativePath>../ModuleProject/</relativePath>
</parent>
<artifactId>A</artifactId>
<version>1.0.2</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.3</version>
</dependency>
</dependencies>
项目B:
<parent>
<groupId>com.deneme.projectname</groupId>
<artifactId>ModuleGroup</artifactId>
<version>1.0.1</version>
<relativePath>../ModuleProject/</relativePath>
</parent>
<artifactId>B</artifactId>
<version>1.0.2</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.deneme.projectname</groupId>
<artifactId>A</artifactId>
<version>1.0.2</version>
</dependency>
</dependencies>
项目C:
<parent>
<groupId>com.deneme.projectname</groupId>
<artifactId>ModuleGroup</artifactId>
<version>1.0.1</version>
<relativePath>../ModuleProject/</relativePath>
</parent>
<artifactId>C</artifactId>
<version>1.0.2</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.deneme.projectname</groupId>
<artifactId>B</artifactId>
<version>1.0.2</version>
</dependency>
</dependencies>