gpt4 book ai didi

java - 使用 Maven 继承和构建

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:49:14 25 4
gpt4 key购买 nike

我开始学习 Maven,现在我正尝试从简单的开始做一些真实世界的项目。也许对于这里的大多数人来说它看起来很简单,但我真的很困惑如果我想同时打包父项目和子项目我应该怎么做。

(PS:顺便说一句,我正在使用 intellij idea)

这是我的配置

项目A

  • 假设依赖guava和gson

项目 B

  • 这将取决于项目 A

项目 C

  • 这将取决于项目 B

当我将项目 A 的包装属性设置为 jar 时,它给出了一个错误,基本上是说“如果它在父 pom 中,则必须将包装元素设置为 pom”。但我知道,如果我将包装元素设置为 pom,它不会创建包。

所以我决定创建另一个项目作为多模块来管理打包问题,但不知道怎么做!很快我怎样才能同时为它们中的每一个生成 jar 文件?

编辑 - 这是我所做的

模块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>

最佳答案

如果您的项目 A 将 B 和 C 声明为模块,则它必须将包装元素设置为 pom。这也意味着它不应该包含任何代码并且不会自行生成 Artifact 。它只是一种将项目组合在一起的方式。

在maven中,parent pom用于定义将被所有子项目继承的公共(public)配置(属性等)。

在您的情况下,我猜您需要一个包含 3 个子项的父项目(pom 包装):A、B 和 C:

parentProject 
* module A
* module B
* module C

在 parentProject 上运行 mvn install 时,将构建所有子模块并生成相应的 jar(比如 A.jar、B.jar 和 C.jar)。

注意,不需要在子pom中声明parent就可以达到这个效果,只需要在parentpom中声明为modules即可,这就是project aggregation。在子项中声明父项称为项目继承。您可以查看以下文档以获取更多详细信息:

https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance_vs_Project_Aggregation

关于java - 使用 Maven 继承和构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21726378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com