36

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

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

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

想法:

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

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

4

5 回答 5

63

你必须和

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

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

使用

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

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

于 2013-06-03T09:54:21.830 回答
12

I believe you can create your own POM which aggregates the dependencies you want, and then in your original project add a dependency on that aggregate pom. You will still have to add dependencies on each individual module in your dependency POM, but it will be abstracted from the actual project POMs and allows those dependencies to be managed in one place, which could become useful if you end up having multiple projects that depend on that set of dependencies.

In your example you could create a new pom like this:

<?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>

Then in your original project just add:

<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>
于 2014-10-07T17:40:08.290 回答
7

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

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

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

于 2013-06-05T04:54:20.460 回答
3

正如上面已经有人写的:你不能这样做。但这就是我所做的,并且奏效了。假设您有一些 pom 文件(在您的示例中为 JavaMail),其中包含以下内容:

<type>pom</type>
<dependencyManagement><dependencies><dependency></dependencyManagement>

你想把这个 pom 中提到的所有 jar 复制到某个地方。这就是我所做的,它是快速工作的解决方案
打开原始 pom,只需将原始 pom 文件中的所有依赖项部分按原样复制粘贴到您的新 pom 中。当然使用 maven 依赖插件复制所有 .

于 2018-01-23T11:42:53.947 回答
2

如果您尝试导入的 pom 包含在一个<dependencies/>部分中定义的依赖项,并且您想将它们全部导入,您可以尝试下面的代码。

免责声明:我有一段时间没有这样做了):在您的<dependencyManagement/>部分中,添加 pom 依赖项,如下所示:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>kung.fu<groupId>
            <artifactId>ninja</artifactId>
            <version>1.2.3</version>
            <scope>import</scope>
            <type>pom</type> <!-- Not too sure if you needed this
                                  when it's scoped as import,
                                  but just in case -->
        </dependency>
    </dependencies>
</dependencyManagement>

也可能是您直接在<dependencies/>不需要<dependencyManagement/>位的部分中定义依赖项,但据我记得,它的范围应该import如上所示。

于 2013-06-03T11:25:33.510 回答