2017-02-28 13 views
0

私は、Mavenを使用してマルチモジュールプロジェクトを構築し、難読化しようとしています。 proguard-maven-pluginを使用してfat jarファイルを難読化し、appassemblerプラグインを使用して実行可能なビルド出力を作成できるように、シェード・プラグインを使用して自分のクラス・ファイル(すべてのモジュール)のすべてを含むfat jarファイルを作成します。 appassembler repo dirに他のモジュールの依存関係も表示される点を除いてすべて動作します。これは、難読化されたクラスがすでに影付きのjarファイルに存在するためです。shade、proguard、appassemblerのmavenプラグインの組み合わせ

他のモジュール依存関係を定義してから、シェードプラグインの依存関係を追加しようとしましたが、シェードプラグインがそれらを無視しているようです。

これはのpom.xmlの関連部分は次のとおりです。

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>3.0.0</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
        <configuration> 
         <outputFile>${project.build.directory}/${project.build.finalName}-shaded.${project.packaging}</outputFile> 
         <artifactSet> 
          <includes> 
           <include>${project.groupId}:*</include> 
          </includes> 
         </artifactSet> 
        </configuration> 
       </execution> 
      </executions> 
      <dependencies> 
       <dependency> 
        <groupId>${project.groupId}</groupId> 
        <artifactId>module-a</artifactId> 
        <version>${project.version}</version> 
       </dependency> 
       <dependency> 
        <groupId>${project.groupId}</groupId> 
        <artifactId>module-b</artifactId> 
        <version>${project.version}</version> 
       </dependency> 
      </dependencies> 
     </plugin> 

     <plugin> 
      <groupId>com.github.wvengen</groupId> 
      <artifactId>proguard-maven-plugin</artifactId> 
      <version>2.0.13</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>proguard</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <injar>${project.build.finalName}-shaded.${project.packaging}</injar> 
       <outjar>${project.build.finalName}.${project.packaging}</outjar> 
       <proguardInclude>proguard.pro</proguardInclude> 
       <maxMemory>1024m</maxMemory> 
       <libs> 
        <lib>${java.home}/lib/rt.jar</lib> 
        <lib>${java.home}/lib/jce.jar</lib> 
       </libs> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>appassembler-maven-plugin</artifactId> 
      <version>2.0.0</version> 
      <executions> 
       <execution> 
        <id>assemble</id> 
        <phase>package</phase> 
        <goals> 
         <goal>assemble</goal> 
        </goals> 
        <configuration> 
         <programs> 
          <program> 
           <mainClass>my.package.Application</mainClass> 
          </program> 
         </programs> 
         <useWildcardClassPath>true</useWildcardClassPath> 
         <repositoryLayout>flat</repositoryLayout> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

すべてのアイデアは歓迎されています。

+0

のですか?どのようなコマンドを使用しましたか?あなたはmavenの出力を提供できますか? – Adonis

+0

@Auttouf mvnクリーンインストール。ビルドは成功しましたが、影付​​きのjarにはモジュール-aとモジュール-bのクラスが含まれていません – raven

答えて

1

私はあなたにappassemblerプラグインの位相を変更しようとすべきだと思います。ビルド配布zipからjarを除外するためにアセンブリプラグインを使用しました。

のpom.xml:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>3.0.0</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
        <configuration> 
         <outputFile>${project.build.directory}/${project.build.finalName}-shaded.${project.packaging}</outputFile> 
         <artifactSet> 
          <includes> 
           <include>${project.groupId}:*</include> 
          </includes> 
         </artifactSet> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

     <plugin> 
      <groupId>com.github.wvengen</groupId> 
      <artifactId>proguard-maven-plugin</artifactId> 
      <version>2.0.13</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>proguard</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <injar>${project.build.finalName}-shaded.${project.packaging}</injar> 
       <outjar>${project.build.finalName}.${project.packaging}</outjar> 
       <proguardInclude>proguard.pro</proguardInclude> 
       <maxMemory>1024m</maxMemory> 
       <libs> 
        <lib>${java.home}/lib/rt.jar</lib> 
        <lib>${java.home}/lib/jce.jar</lib> 
       </libs> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>appassembler-maven-plugin</artifactId> 
      <version>2.0.0</version> 
      <executions> 
       <execution> 
        <id>assemble</id> 
        <phase>package</phase> 
        <goals> 
         <goal>assemble</goal> 
        </goals> 
        <configuration> 
         <programs> 
          <program> 
           <mainClass>my.package.Application</mainClass> 
          </program> 
         </programs> 
         <useWildcardClassPath>true</useWildcardClassPath> 
         <repositoryLayout>flat</repositoryLayout> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>3.0.0</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
        <configuration> 
         <descriptors> 
          <descriptor>descriptor.xml</descriptor> 
         </descriptors> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

descriptor.xml:あなたのpom.xmlが

<assembly xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns="http://maven.apache.org/ASSEMBLY/2.0.0" 
     xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd"> 
<id>distribution</id> 
<formats> 
    <format>zip</format> 
</formats> 
<fileSets> 
    <fileSet> 
     <directory>${project.build.directory}/appassembler</directory> 
     <excludes> 
      <exclude>**/module-a-${project.version}.${project.packaging}</exclude> 
      <exclude>**/module-b-${project.version}.${project.packaging}</exclude> 
     </excludes> 
     <outputDirectory>/</outputDirectory> 
    </fileSet> 
</fileSets> 

0

私はあなたの問題は、影付きの瓶とappassemblerが同じフェーズの間に実行されたという事実から来たと思う、パッケージ。私が好きなように便利ではない解決策を見つけたが、手動で他のモジュールのjarファイルを削除するよりも、その優れた

<phase>post-package</phase> 
+0

mavenにはパッケージ後の段階はないと思います。ターゲットの$ {project.packaging}ファイルにもmodule-aクラスとmodule-bクラスが含まれていないため、これは問題ではないと思います。 AFAIK mavenは、pomに表示されている順序で同じフェーズ実行を実行します – raven

+0

https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.htmlを参照してください。すべてのフェーズXでは、プレX、プレX、およびプロセスXのフェーズがあります。ポストパッケージを使用したくない場合は、インストールフェーズを使用することができます。 – Adonis

+0

そのリンクで言及した内容が見つかりませんでした。 http://stackoverflow.com/questions/26607834/maven-lifecycle-vs-phase-vs-plugin-vs-goalを参照してください。それにもかかわらず、appassembler(または他の無作為な単語)のpost-packageまたはinstallフェーズでプロジェクトを構築すると、間違いなくエラーは発生しませんでしたが、結果は同じでした。 – raven

関連する問題