在maven中构建jar的runnable和容器版本

时间:2015-03-18 16:53:11

标签: maven executable-jar maven-assembly-plugin

我有一个包部署到一个提供log4j的容器。但同时包具有主类,用户可以从命令行执行它。

我的问题是如何构建jar:

  1. 使用容器提供的log4j(通常我会将其标记为<scope>provided</scope>
  2. 可以从命令行执行(这意味着它必须包含所有依赖项,包括log4j)
  3. 最终它不一定只是一个jar文件。可以有一个jar用于部署,另一个用于手动执行。在这种情况下,但两个罐子必须通过一次maven调用来构建。

    我认为它可以由两个<execution>的maven-assembly-plugin管理,但我真的不知道如何只在其中一个中包装log4j依赖。

1 个答案:

答案 0 :(得分:0)

我可以使用shade插件管理它。我的设置是:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.3</version>
            <executions>
                <execution>
                    <id>standalone</id>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>***path.to.main.class***</mainClass>
                            </transformer>
                        </transformers>
                        <finalName>${artifactId}-standalone</finalName>
                    </configuration>
                </execution>
                <execution>
                    <id>container</id>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <artifactSet>
                            <excludes>
                                <exclude>log4j</exclude>
                            </excludes>
                        </artifactSet>
                        <minimizeJar>true</minimizeJar>
                    </configuration>
                </execution>
            </executions>
        </plugin>