2

私はプロガードに少し戸惑っています。pom.xmlにこの設定があります。まず、<injar>タグが機能しません...このタグを使用すると、proguardの最後の呼び出しに-injarsが含まれません。次に、WEB-INF / lib(1つのjarですべてのコードをコンパイルします)で発生する1つのjarのみを難読化し、他のすべてのlibをフィルタリングできるかどうかはわかりません。

<plugin>
        <groupId>com.pyx4me</groupId>
        <artifactId>proguard-maven-plugin</artifactId>
        <version>2.0.4</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>proguard</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <proguardVersion>4.8</proguardVersion>
            <obfuscate>true</obfuscate>
            <maxMemory>1024m</maxMemory>
            <includeDependency>false</includeDependency> 
            <options>
                <option>-injars target/Test.war</option>
                <option>-ignorewarnings</option>
            </options>
            <outjar>target/Test-obf.war</outjar> 

            <attach>false</attach>
            <outputDirectory>${project.build.directory}</outputDirectory>
                <proguardInclude>${basedir}\proguard.conf</proguardInclude>
        <libs>
            <lib>${java.home}/lib/rt.jar</lib>
        </libs>
        <addMavenDescriptor>false</addMavenDescriptor>
        <skip>false</skip>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>net.sf.proguard</groupId>
            <artifactId>proguard</artifactId>
            <version>4.4</version>
            <scope>runtime</scope>
        </dependency>
    </dependencies>
</plugin>

その構成では、多くの警告があります。これは、プロガードがWEB-INF/lib内のすべてのjarファイルを難読化しようとしているようです。誰かがそれに光を当てることができますか。前もって感謝します。

追加: すべてのパラメーターの前にある出力の問題は、私にとって非常にトリッキーでした。私が理解したように、pom.xmlでinjarとoutjarの両方を指定するときは、${basedir}を使用しないでください。原因${basedir}は絶対パスに変わり、必然的にプロガードも絶対パスを設定します。

4

1 に答える 1

0

まず第一に、私はMavenのProGuardを使用したことがなく、Antからのみ使用しました。

私はあなたの設定ファイルをここにあるものと比較します

 <options>
     <option>-allowaccessmodification</option>
     <option>-keep public class com.degoo.ui.ClientBackendStarter { public *; public static *; }</option>
 </options>
 <injar>${project.build.finalName}.jar</injar>
 <outjar>${project.build.finalName}-small.jar</outjar>

あなたの場合、あなたは構成injarsoutjar、見るのが奇妙な別の方法で。

(すべてのコードを1つのjarにコンパイルします)、他のすべてのライブラリをフィルタリングします。プロガードがWEB-INF/lib内のすべてのjarファイルを難読化しようとしているように見えるために多くの警告があります

その場合、警告はProGuardがすべてのライブラリをコンパイルしようとするという事実からではなく、フィルタリングされたコードを難読化するときに外部ライブラリへの参照を確認したいためです。これを参照してください。

コードで参照されるすべての外部jarに対して追加する必要があります

<lib>path/lib.jar</lib>

これはおそらく多くの警告を回避するのに役立ちますが、実際のアートは-keepオプションを構成するときに始まります。この構成から始めることをお勧めしますhttps://stackoverflow.com/a/7511926/1360074 それがうまくいく場合は、最終的にもっと難読化してみてください。

于 2012-12-28T12:35:32.480 に答える