【问题标题】:Maven plugin to manipulate existing jarMaven 插件来操作现有的 jar
【发布时间】:2015-03-06 13:41:00
【问题描述】:

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

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

prepared.jar -- 复制到 --> /linux/prepared-linux.jar(与prepared.jar的内容相同,但是manifest包含一些特定于linux的东西)

prepared.jar -- 复制到 --> /win64/prepared-win64.jar (与prepared.jar的内容相同,但是manifest包含一些特定于windows的东西)

我不想多次创建prepared.jar,只是为了复制它并在副本中更改清单。有人知道一些兼容 maven 3.1 的插件,它能够做到这一点,并且易于配置并且可以在 windows 和 linux 平台上运行?

【问题讨论】:

  • "using maven-antrun-plugin",那么你可能可以使用你的 ant 脚本来改变清单。
  • @RC。我正在使用 antrun 但仅通过 元素进行复制。不知道怎么用ant修改jar文件,也不知道怎么创建ant脚本。
  • @RC。谢谢和+1,在你指出我在哪里看后,我自己解决了:)

标签: java maven jar maven-3


【解决方案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>

【讨论】:

  • 不错的解决方案 :)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2015-08-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    • 2014-09-08
    • 2015-08-20
    • 2015-11-06
    • 2019-07-02
    相关资源
    最近更新 更多