Maven插件来操纵现有的jar

时间:2015-01-08 12:28:42

标签: java maven jar maven-3

我已经有maven build pom(稍微复杂),它为我的项目创建了编译和准备好的jar文件。我使用maven-antrun-plugin将目标部分中的副本复制到各个目的地。

我想要实现的是在每个副本中更改清单文件(向其中添加内容)。例如:

prepared.jar - 复制到 - > /linux/prepared-linux.jar(与prepared.jar相同的内容,但清单包含特定于linux的内容)

prepared.jar - 复制到 - > /win64/prepared-win64.jar(与prepared.jar相同的内容,但清单包含特定于windows的内容)

我不想多次创建prepared.jar,只是复制它并在副本中更改清单。有没有人知道一些maven 3.1兼容的插件,它能够做到这一点,并且易于配置,适用于Windows和Linux平台?

2 个答案:

答案 0 :(得分:1)

所以最后我根据@RC的评论自己解决了这个问题。通过查看此处Simpliest way to add an attribute to a jar Manifest in Maven,解决方案是在复制元素之后添加类似于我的pom文件的内容:

        <jar file="${install.dir}/linux/${program.name}.jar" update="true">
          <manifest>
            <attribute name="my specific linux att" value="my specific linux value" />
          </manifest>
        </jar>                                                

答案 1 :(得分:1)

仅为了信息而发布替代方案,希望您不要介意。基本上你可以通过使用maven-jar-plugin和多次执行来实现相同的目的,比如

<plugin>
    <artifactId>maven-jar-plugin</artifactId>
    <executions>
        <execution>
            <id>only-library</id>
            <goals>
                <goal>jar</goal>
            </goals>
            <phase>package</phase>
        </execution>
        <execution>
            <id>linux</id>
            <goals>
                <goal>jar</goal>
            </goals>
            <phase>package</phase>
            <configuration>
                <classifier>linux</classifier>
                <archive>
                    <index>true</index>
                    <manifest>
                        <addClasspath>true</addClasspath>
                    </manifest>
                    <manifestEntries>
                        <yourKey>linux</yourKey>
                    </manifestEntries>
                </archive>
            </configuration>
        </execution>
        <execution>
            <id>win64</id>
            <goals>
                <goal>jar</goal>
            </goals>
            <phase>package</phase>
            <configuration>
                <classifier>win64</classifier>
                <archive>
                    <index>true</index>
                    <manifest>
                        <addClasspath>true</addClasspath>
                    </manifest>
                    <manifestEntries>
                        <yourKey>win64</yourKey>
                    </manifestEntries>
                </archive>
            </configuration>
        </execution>
    </executions>
</plugin>