用于操作现有 jar 的 Maven 插件

Maven plugin to manipulate existing jar

我已经有 maven 构建 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 平台上工作?

所以最后我能够根据@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>                                                

发布替代方案仅供参考,希望您不要介意。基本上你可以通过多次执行使用 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>