如何在 Maven 中使用 POM 作为依赖项?

2022-09-01 05:42:08

有没有办法向我的POM添加类型依赖关系并获取其所有模块?pom

JavaMail就是一个很好的例子。Maven Central Repo有一个名为comm.sun.mail:all:1.5.0的父POM,模块包括:mail,mailapi,mailapijar,smtp,imap,gimap,pop3和dsn。

但是,“所有”工件只有一个文件:有没有办法将此“所有”工件作为依赖项添加到我的POM并获取其所有模块?我90%确定这不是在Maven中使用依赖项的正确方法,但我想听听The Stack专家的意见。pom.xml

想法:

  • <dependencies><dependency>...<type>pom</type></dependency></dependencies>
  • <dependencyManagement><dependencies><dependency>...<type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

相关:Netbeans:pom 类型的 maven 依赖项


答案 1

你必须去

<dependencies>
  <dependency>
     <groupId>com.my</groupId>
     <artifactId>commons-deps</artifactId>
     <type>pom</type>
  </dependency>
</dependencies>

这将以传递方式将 声明的所有依赖项添加到当前 POM 中。com.my:commons-deps

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>...</groupId>
            <artifactId>...</artifactId>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

在依赖项管理中作为工件版本的简单“包含”。因此,它不会在项目中添加任何依赖项。


答案 2

我相信你可以创建自己的POM来聚合你想要的依赖关系,然后在你的原始项目中添加对该聚合pom的依赖关系。您仍然需要在依赖项POM中的每个单独模块上添加依赖项,但它将从实际的项目POM中抽象出来,并允许在一个地方管理这些依赖项,如果您最终拥有多个依赖于该依赖项集的项目,这可能会很有用。

在你的例子中,你可以创建一个新的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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.mycompany</groupId>
    <artifactId>mail-deps</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging>

    <dependencies>
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>mailapi</artifactId>
            <version>1.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>mailapijar</artifactId>
            <version>1.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>imap</artifactId>
            <version>1.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>gimap</artifactId>
            <version>1.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>pop3</artifactId>
            <version>1.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>dsn</artifactId>
            <version>1.5.0</version>
        </dependency>
    </dependencies>
</project>

然后在原始项目中添加:

<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/maven-v4_0_0.xsd">
 ...
 <modules>
   <module>src/main/java/com/mycompany</module>
 </modules>
 ...
 <dependencies>
     <dependency>
         <groupId>com.mycompany</groupId>
         <artifactId>mail-deps</artifactId>
         <version>1.0.0</version>
         <type>pom</type>
     </dependency>
 </dependencies>
</project>

推荐