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

kev*_*rpe 30 java dependencies pom.xml maven

有没有办法将pom类型依赖项添加到我的POM并获取其所有模块?

JavaMail就是一个很好的例子.Maven Central Repo有一个父POM,名为:com.sun.mail:all:1.5.0 with modules:mail,mailapi,mailapijar,smtp,imap,gimap,pop3和dsn.

但是,"all"artefact只有一个文件:pom.xml 有没有办法将这个"all"artefact作为依赖项添加到我的POM并获取其所有模块?我90%肯定这不是在Maven中使用依赖项的正确方法,但我想从Stack上的专家那里听到它.

思路:

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

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

Gui*_*ont 51

你必须去

<dependencies>
  <dependency>
     <groupId>com.my</groupId>
     <artifactId>commons-deps</artifactId>
     <type>pom</type>
  </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

这会将所有声明的依赖项com.my:commons-deps传递给当前的POM.

运用

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>...</groupId>
            <artifactId>...</artifactId>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
Run Code Online (Sandbox Code Playgroud)

在依赖关系管理中作为工件版本的简单"包含".因此,它不会在您的项目中添加任何依赖项.

  • 请注意,虽然这回答了大多数人在这里引发最有可能的问题,但这并不是OP所要求的. (3认同)

小智 9

我相信你可以创建自己的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>
Run Code Online (Sandbox Code Playgroud)

然后在原始项目中添加:

<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>
Run Code Online (Sandbox Code Playgroud)


kev*_*rpe 7

简短的回答:您不能在 Maven 中执行此操作。

其他答案仅使“所有”POM 成为依赖项。不能解决问题。另一个答案尝试导入“所有”POM 的依赖项。我不需要依赖;我需要“所有”POM 的(子)模块。再次,不能解决问题。

旁注:我错误地使用了 JavaMail 库。我只需要添加一个依赖项:com.sun.mail:javax.mail:1.5.0