16

问题..
我想添加一个对 Maven jar 的依赖项,该 jar与它的 dependencies 打包在一起

详细信息..
我有一个多模块 Maven 项目,其中一个模块依赖于本机库等。作为其构建的一部分,它将其依赖项打包成jar-with-dependencies如下所示:

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
            <manifest>
                <mainClass>${mainClass}</mainClass>
            </manifest>
        </archive>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

很好,我在构建时得到了两个罐子:

seaniscool-0.0.1-SNAPSHOT.jar
seaniscool-0.0.1-SNAPSHOT-jar-with-dependencies.jar

但是,我想在同一个项目的另一个模块中使用这个工件。如果我只是将模块添加为依赖项,我会得到不包含本机库的 jar。

我也可以复制构建配置以在第二个模块中包含本机库,它不是很广泛,但不希望这样做。

有什么想法可以将其添加jar-with-dependencies为依赖项,从而依赖于包含的库吗?

一些想法..
我知道我可以用 Maven 可以引用的测试类构建一个单独的 jar:

在第一个模块中:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.2</version>
    <executions>
        <execution>
            <goals>
                <goal>test-jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>

在第二个模块中:

<dependency>
    <groupId>my.group.id</groupId>
    <artifactId>my.artifact.id</artifactId>
    <version>my.version</version>
    <type>test-jar</type>
    <scope>test</scope>
</dependency>

这个概念在这里可以转移吗?

4

2 回答 2

28

您可以使用Maven 分类器来执行此操作。使用分类器,因此 maven 模块可以从同一源构建多个工件。示例是 jdk1.6 或 1.7 版本,甚至是 maven 可以构建的源代码和 javadoc jars。

所以试试这个:

<dependency>
  <groupId>yourID</groupId>
  <artifactId>seaniscool</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <classifier>jar-with-dependencies</classifier>
</dependency>

如果您想将您的分类器重命名为更好的名称,例如 withNative 或 complete 或其他任何名称,请查看maven shade 插件,它也可以构建具有依赖关系的 jar,但允许更多控制。

于 2013-05-26T17:44:59.810 回答
2

只是@msczalbach 回答的旁注

实际上,即使使用标准的 maven-jar-plugin,您也可以为生成的 jar 提供任何后缀。只需使用配置。

例如:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
</plugin>
<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <descriptorRefs>
            <descriptorRef>self-contained</descriptorRef>
        </descriptorRefs>
    </configuration>
</plugin>
于 2016-04-11T11:32:56.187 回答