2009-05-19 13 views
17

MavenがProGuardで動作するようにしようとしています。Maven、Proguardとアセンブリの問題

私は何を達成したいことは以下の通りである。私のソースファイルにわたり

  • 実行ProGuardのと生産難読化されたクラス

  • 私はそれを実行できるように、メインクラスを参照するマニフェストファイルを作成します。 jarとして

  • すべての関連するライブラリjarをアンパックし、それらをすべて含む1つの巨大なjarを作成します。このファイルは、.classファイルと.xmlファイルにのみ接続する必要があります。

  • さまざまなREADME.txtファイルなどを含む.zipファイルとtar.gzファイルにそれらをアセンブルします。これまでのところ、私はこのような何かを持っている

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>2.2</version> 
      <configuration> 
       <archive> 
        <manifest> 
         <mainClass>com.class.path.MainClass</mainClass> 
        </manifest> 
       </archive> 
       <includes> 
        <include>**/*.class</include> 
        <include>**/*.xml</include> 
       </includes> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>com.pyx4me</groupId> 
      <artifactId>proguard-maven-plugin</artifactId> 
      <configuration> 
       <options> 
        <option>-allowaccessmodification</option> 
       </options> 
       <obfuscate>true</obfuscate> 
       <injar>classes</injar> 
       <outjar>${project.build.finalName}.jar</outjar> 
       <outputDirectory>${project.build.directory}</outputDirectory> 
       <proguardInclude>src/main/assembly/proguard.conf</proguardInclude> 
       <libs> 
        lib/rt.jar</lib> 
       </libs> 
      </configuration> 
      <executions> 
       <execution> 
        <phase>process-classes</phase> 
        <goals> 
         <goal>proguard</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>assembly</id> 
        <phase>package</phase> 
        <goals> 
         <goal>assembly</goal> 
        </goals> 
        <configuration> 
         <descriptors> 
          <descriptor> 
           src/main/assembly/bin.xml 
          </descriptor> 
         </descriptors> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

しかし、私は何の喜びを持っていませんよ。誰も私にこれについての曖昧な指摘を与えることができますか?

事前のおかげで、 マット

+0

@starblueである私のため

<plugin> <groupId>com.pyx4me</groupId> <artifactId>proguard-maven-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>proguard</goal> </goals> </execution> </executions> <configuration> <obfuscate>true</obfuscate> <options> <option>-allowaccessmodification</option> <option>-keep public class com.class.path.MainClass { public *; public static *; }</option> </options> <injar>${project.build.finalName}.jar</injar> <outjar>${project.build.finalName}-small.jar</outjar> <outputDirectory>${project.build.directory}</outputDirectory> <libs> <lib>${java.home}/lib/rt.jar</lib> <lib>${java.home}/lib/jsse.jar</lib> </libs> <addMavenDescriptor>false</addMavenDescriptor> </configuration> </plugin> 

を働いていた設定です任意の '[assemblies]'コンセプト。しかし、 '[assembly]'は非常に有効なものです。だから、あなたのビジョンに合致しないすべてのものを除いて、ユニークなドメインのタグと同じように行動しないようにしてください。タグはセット用であり、より多くの制約を加える。 Mavenにも当てはまるタグを使用することを禁じてはいけません。これは厄介なことです。 –

+0

http://maven.apache.org/plugins/maven-assembly-plugin/:このプラグインは「アセンブリ」を生成します。 – starblue

答えて

9

ここでは、最終的なjarファイルがMavenのは持っていませんfinalName-small.jar

+0

パッケージフェーズのフェーズではなく、パッケージフェーズのフェーズを使用する理由はありますか?プロセスクラスはコンパイルされてからパッケージの前に実行されるので、ターゲット/クラスがjarファイルになる前にアクセスすることができます。 – sal

+0

それはしばらくしていますが、私が知っている限り、プラグインは基本的にプロガードを実行していることがわかったので、1つの瓶を取り出して葯を出すのが好きです。言い換えれば、多くの試行錯誤がありますが、これは動作します... –

+0

同じプロジェクトで複数のMavenモジュールをどう扱うのですか?あなたはルートpom.xmlでプラグインを実行しますか?それをWeb UIモジュールアセンブリなどで実行しますか? – Alex