【问题标题】:How to avoid the manifest file being overwritten by proguard如何避免清单文件被proguard覆盖
【发布时间】:2014-06-06 16:24:02
【问题描述】:

我在我的 java 应用程序中使用了几个库。

在 pom.xml 中,proguard maven 插件像这样包含它们:

<inclusion>
    <groupId>javafx</groupId>
    <artifactId>jfxrt</artifactId>
    <library>true</library>
    <filter>!META-INF/**</filter>
</inclusion>

我注意到,只有当我包含 &lt;library&gt; 设置为 true 的库时,清单文件才会被替换,尽管我为所有库指定了 &lt;filter&gt;。 但我需要将它们包含在内,并将 &lt;library&gt; 设置为 true,否则其中一些将不起作用。

现在在构建 jar 之后,它不会启动,因为 Manifest 不再包含主类的路径。

我找到了两种方法来解决这个问题。但是,两者都不起作用。

第一种方法:

    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.3</version>
    <executions>
        <execution>
            <phase>install</phase>
            <configuration>
                <tasks>
                    <echo
                        message="Adding Manifest to  ${project.build.directory}/${my.outfilename}.jar" />
                    <manifest file="META-INF/MANIFEST.MF" mode="replace">
                        <attribute name="Manifest-Version" value="1.0" />
                        <attribute name="Package"
                            value="com.xyz.mypackage" />
                        <attribute name="Main-Class" value="MyMainClass" />
                        <attribute name="Version"
                            value="${my.version.main}${my.version.sub}" />
                    </manifest>
                </tasks>
            </configuration>
        </execution>
    </executions>
</plugin>

什么都没有发生。我已经设置&lt;phase&gt; 来安装和部署。两者都没有效果。

第二种方法:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <executions>
        <execution>
            <phase>deploy</phase>
            <configuration>
                <archive>
                    <manifestFile>${basedir}/build/MANIFEST.MF</manifestFile>
                </archive>
            </configuration>
        </execution>
    </executions>
</plugin>

这也不会改变任何事情。即使使用 -X 来获得调试输出,我也看不到其中一个插件曾经被执行过。两个&lt;plugin&gt; 部分都在&lt;build&gt;&lt;plugins&gt;&lt;/plugins&gt;&lt;/build&gt;

现在我真的卡住了,因为在构建 jar 之后手动更改 Manifest 文件在自动构建过程中是不可接受的。

希望您能提供帮助。谢谢!

【问题讨论】:

    标签: maven replace manifest proguard overwrite


    【解决方案1】:

    我花了好几天才弄明白。其实很简单:

    在 proguard-maven-plugin 的 &lt;configuration&gt; 部分中添加以下内容:

    <archive>
         <manifest>
            <mainClass>MyMainClass</mainClass>
            <packageName>com.xyz.abc</packageName>
        </manifest>
    </archive>
    

    这将在 Manifest 中添加一行,其中包含指定的 Main 类

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-13
      • 1970-01-01
      • 2015-03-20
      • 2019-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      相关资源
      最近更新 更多