如何使用来自多个模块的依赖关系构建Uber jar

时间:2016-04-11 12:39:22

标签: java maven intellij-idea jenkins jar

我在IntelliJ中设置了一个多模块项目。我的模块结构如下所示:

Project (no pom.xml file)
|
|--moduleA
|    |
|
|--moduleB
|    |-Log4J
|    |-Jackson
|
|--moduleC
|    |-moduleA
|    |-moduleB
|    |-Log4J
|
|--moduleD
|    |-moduleC
|    |-moduleA
|    |-moduleB
|    |-Log4J
|
|--moduleE
|    |-moduleA
|    |-moduleB
|    |-moduleC
|    |-Log4J

moduleC取决于moduleAmoduleBmoduleD取决于moduleAmoduleBmoduleCmoduleE也是如此。

我想创建两个优步罐子。一个用于moduleD,一个用于moduleE,每个包含模块的依赖关系,包括模块A,B和C.

我正在使用Maven 3管理我的依赖项和maven-shade-plugin来创建Uber jar。

我在pom.xml文件中添加了必要的依赖项,如下所示:

<dependency>
  <groupId>com.modules</groupId>
  <artifactId>moduleA</artifactId>
  <version>1.0</version>
</dependency>

我已将maven-shade-plugin添加到每个模块的pom.xml个文件中。到目前为止,我能够为moduleAmoduleB构建一个超级jar,但是当我尝试moduleC时,我收到以下错误:

[WARNING] The POM for com.modules:moduleA:jar:1.0 is missing, no dependency information available
[WARNING] The POM for com.modules:moduleB:jar:1.0 is missing, no dependency information available

我该如何解决这个问题?

如果我通过IntelliJ构建和运行模块,一切正常。此外,我还可以通过配置IntellJ工件来构建超级jar。

如何配置Maven来执行此操作?我需要它,因为我想使用超级jar进行制作,我试图设置Jenkins在提交后构建解决方案。

我发布了以下帖子:How to create self-containing (standalone) jar of each modules of a multi-module maven project,但我无法使其发挥作用。

修改

这是maven-shade-pluginmoduleA

中的moduleB设置
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.4.3</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

这是maven-shade-plugin中的moduleC

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.4.3</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>shade</goal>
                </goals>
                <configuration>
                    <filters>
                        <filter>
                            <artifact>*:*</artifact>
                            <excludes>
                                <exclude>META-INF/*.SF</exclude>
                                <exclude>META-INF/*.DSA</exclude>
                                <exclude>META-INF/*.RSA</exclude>
                            </excludes>
                        </filter>
                    </filters>
                </configuration>
            </execution>
        </executions>
    </plugin>

如您所见,我正在使用默认配置。

1 个答案:

答案 0 :(得分:1)

尝试添加

<includes>
  <include>**</include>
</includes>

在您定义排除的同一个地方。

我能找到<filter>的唯一出现是与包含和排除过滤器结合使用。

请勿抓住我,但这就是我猜你的构建失败的原因。