2016-01-17 15 views
10

私は以下のファイルpom.xmlを持っています。私は、コマンドmvn clean compile assembly:single installを発行するとき、私はMavenのはProGuardは依存関係でJARを難読化していません

  • すべての依存関係と私のコードの
  • 難読化されたバージョンが含まれているJARを生成したいです。

私のコードは "jar-with-dependencies"ファイルで難読化されていません。

mvn clean compile installを実行すると、結果のファイルには自分のアプリケーションの難読化されたコードが含まれていますが、依存性はありません。

すべての依存関係と難読化されたコードを持つJARファイルを取得するにはどうすればよいですか?

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.mycompany</groupId> 
    <artifactId>myproduct</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 
    <properties> 
     <restlet-version>2.3.5</restlet-version> 
    </properties> 
    <dependencies> 
     <dependency> 
      <groupId>org.spongepowered</groupId> 
      <artifactId>spongeapi</artifactId> 
      <version>3.0.0</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.12</version> 
     </dependency> 
     <dependency> 
      <groupId>org.easytesting</groupId> 
      <artifactId>fest-assert-core</artifactId> 
      <version>2.0M8</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.mockito</groupId> 
      <artifactId>mockito-core</artifactId> 
      <version>1.10.19</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.restlet.jse</groupId> 
      <artifactId>org.restlet</artifactId> 
      <version>${restlet-version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.restlet.jse</groupId> 
      <artifactId>org.restlet.ext.jackson</artifactId> 
      <version>${restlet-version}</version> 
     </dependency> 
     <dependency> 
      <groupId>com.googlecode.json-simple</groupId> 
      <artifactId>json-simple</artifactId> 
      <version>1.1.1</version> 
     </dependency> 
    </dependencies> 
    <build> 
     <resources> 
      <resource> 
       <directory>${project.basedir}/src/main/resources</directory> 
       <filtering>true</filtering> 
      </resource> 
     </resources> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.3</version> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>templating-maven-plugin</artifactId> 
       <version>1.0-alpha-3</version> 
       <executions> 
        <execution> 
         <id>filter-src</id> 
         <goals> 
          <goal>filter-sources</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <configuration> 
        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>com.github.wvengen</groupId> 
       <artifactId>proguard-maven-plugin</artifactId> 
       <version>2.0.8</version> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals><goal>proguard</goal></goals> 
        </execution> 
       </executions> 
       <configuration> 
        <proguardVersion>5.2</proguardVersion> 
        <options> 
         <option>-allowaccessmodification</option> 
         <option>-dontoptimize</option> 
         <option>-dontshrink</option> 
         <option>-dontnote</option> 
         <option>-keepattributes Signature</option> 
         <option>-keep class com.mycompany.MyPlugin { *; }</option> 
        </options> 
        <libs> 
         <lib>${java.home}/lib/rt.jar</lib> 
        </libs> 
        <dependencies> 
         <dependency> 
          <groupId>net.sf.proguard</groupId> 
          <artifactId>proguard-base</artifactId> 
          <version>5.2</version> 
          <scope>runtime</scope> 
         </dependency> 
        </dependencies> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

アップデート1(2016年1月17日午後07時54分MSK):以下に示すようには、ProGuardの設定を変更しましたが、mvn clean compile assembly:singleはまだ難読化されていないクラスファイルとJARを生成します。

<plugin> 
    <groupId>com.github.wvengen</groupId> 
    <artifactId>proguard-maven-plugin</artifactId> 
    <version>2.0.8</version> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals><goal>proguard</goal></goals> 
     </execution> 
    </executions> 
    <configuration> 
     <proguardVersion>5.2</proguardVersion> 
     <options> 
      <option>-allowaccessmodification</option> 
      <option>-dontoptimize</option> 
      <option>-dontshrink</option> 
      <option>-dontnote</option> 
      <option>-keepattributes Signature</option> 
      <option>-keep class com.mycompany.MyPlugin { *; }</option> 
     </options> 
     <injar>${project.build.finalName}-jar-with-dependencies.jar</injar> 
     <libs> 
      <lib>${java.home}/lib/rt.jar</lib> 
     </libs> 
     <dependencies> 
      <dependency> 
       <groupId>net.sf.proguard</groupId> 
       <artifactId>proguard-base</artifactId> 
       <version>5.2</version> 
       <scope>runtime</scope> 
      </dependency> 
     </dependencies> 
    </configuration> 
</plugin> 

アップデート2(2016年1月17日午前20時29分MSK):mvn clean compile assembly:single installは失敗します。最後のメッセージはhereです。

答えて

9

proguard-maven-pluginは、maven-assembly-pluginが生成された副作用jar-with-dependenciesではなく、プロジェクトの主な成果物を難読化します。

あなたはinjar属性を指定することにより、jar-with-dependenciesを難読化するためのプラグインを設定する必要があります。

を処理するアプリケーションの入力ジャー名(または戦争、耳、ジッパー)を指定します。

<injar>${project.build.finalName}-jar-with-dependencies.jar</injar> 

は今、またあなたのPOMでプラグインの実行順序に問題がある:私たちはmaven-assembly-pluginproguard-maven-plugin前に実行されていることを確認する必要があります。したがって、packageフェーズにバインドされたmaven-assembly-pluginの明示的な実行を、コマンドラインから手動で起動するのではなく、assembly:singleで実行するように定義することが最善です。これは、コンフィギュレーション次のようになります。

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>assembly</id> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      <phase>package</phase> 
      <configuration> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

、その後、あなただけproguard-maven-pluginプラグインの設定は、あなたのPOMのそれの後であることを確認する必要があります。

mvn clean installでMavenを呼び出すと、依存関係のある難読化されたjarが作成されます。あなたの実際のPOMをテストするには


、私は2つのリポジトリを追加しました:spongeapi依存関係を解決するために

  • https://repo.spongepowered.org/mavenを。
  • http://maven.restlet.comorg.restlet.jseの依存関係を解決する。これら2つの依存関係

org.restlet.ext.jackson依存性がビルドパスにないcom.sun.msv.*クラスを使用しているため、警告がProGuardのによって生成されました。私はあなたのコードが現在動作していると考えているので、それらのクラスをインクルードする必要はなく、それらの警告は無視できることを意味します。このように、私は-dontwarnオプションを追加して、警告があるときにProGuardがエラーにならないようにしました。

私が正常に依存関係を持つjarファイルを難読化することができたたため、最終的なPOMは以下の通りです:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.mycompany</groupId> 
    <artifactId>myproduct</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <repositories> 
     <repository> 
      <id>spongepowered</id> 
      <url>https://repo.spongepowered.org/maven</url> 
     </repository> 
     <repository> 
      <id>restlet</id> 
      <url>http://maven.restlet.com</url> 
     </repository> 
    </repositories> 
    <properties> 
     <restlet-version>2.3.5</restlet-version> 
    </properties> 
    <build> 
     <resources> 
      <resource> 
       <directory>${project.basedir}/src/main/resources</directory> 
       <filtering>true</filtering> 
      </resource> 
     </resources> 
     <plugins> 
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.3</version> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>templating-maven-plugin</artifactId> 
       <version>1.0-alpha-3</version> 
       <executions> 
        <execution> 
         <id>filter-src</id> 
         <goals> 
          <goal>filter-sources</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>assembly</id> 
         <goals> 
          <goal>single</goal> 
         </goals> 
         <phase>package</phase> 
         <configuration> 
          <descriptorRefs> 
           <descriptorRef>jar-with-dependencies</descriptorRef> 
          </descriptorRefs> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>com.github.wvengen</groupId> 
       <artifactId>proguard-maven-plugin</artifactId> 
       <version>2.0.8</version> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals><goal>proguard</goal></goals> 
         <configuration> 
          <injar>${project.build.finalName}-jar-with-dependencies.jar</injar> <!-- make sure to obfuscate the jar with dependencies --> 
          <proguardVersion>5.2</proguardVersion> 
          <options> 
           <option>-allowaccessmodification</option> 
           <option>-dontoptimize</option> 
           <option>-dontshrink</option> 
           <option>-dontnote</option> 
           <option>-dontwarn</option> <!-- added option to ignore com.sun missing classes --> 
           <option>-keepattributes Signature</option> 
           <option>-keep class com.mycompany.MyPlugin { *; }</option> 
          </options> 
          <libs> 
           <lib>${java.home}/lib/rt.jar</lib> 
          </libs> 
          <dependencies> 
           <dependency> 
            <groupId>net.sf.proguard</groupId> 
            <artifactId>proguard-base</artifactId> 
            <version>5.2</version> 
            <scope>runtime</scope> 
           </dependency> 
          </dependencies> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
    <dependencies> 
     <dependency> 
      <groupId>org.spongepowered</groupId> 
      <artifactId>spongeapi</artifactId> 
      <version>3.0.0</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.12</version> 
     </dependency> 
     <dependency> 
      <groupId>org.easytesting</groupId> 
      <artifactId>fest-assert-core</artifactId> 
      <version>2.0M8</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.mockito</groupId> 
      <artifactId>mockito-core</artifactId> 
      <version>1.10.19</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.restlet.jse</groupId> 
      <artifactId>org.restlet</artifactId> 
      <version>${restlet-version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.restlet.jse</groupId> 
      <artifactId>org.restlet.ext.jackson</artifactId> 
      <version>${restlet-version}</version> 
     </dependency> 
     <dependency> 
      <groupId>com.googlecode.json-simple</groupId> 
      <artifactId>json-simple</artifactId> 
      <version>1.1.1</version> 
     </dependency> 
    </dependencies> 
</project> 
+0

私は同じ問題でこだわっていると私はあなたの答えを得ることはありません。なぜあなたはリポジトリを追加する必要がありますか?依存関係はすでにpomに指定されています。なぜProguardはもっと必要なのですか?さらに、依存関係ごとにリポジトリはどこにありますか? http://stackoverflow.com/questions/36150297/how-to-assembly-a-project-after-using-proguard-maven-plugin?noredirect=1#comment59941093_36150297をご覧ください。 – Sharcoux

関連する問題