Запутывание проекта Spring Boot Maven с помощью Proguard - PullRequest
0 голосов
/ 01 апреля 2020

Я использую Java 11, Spring Boot 2.2.4 и Proguard 6.2.2.

My pom. xml для Proguard следующим образом

<build>
    <finalName>${artifactId}</finalName>
    <plugins>

        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>

        <plugin>
            <groupId>com.github.wvengen</groupId>
            <artifactId>proguard-maven-plugin</artifactId>
            <version>2.2.0</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>proguard</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <proguardVersion>6.2.2</proguardVersion>
                <injar>${project.build.finalName}.jar</injar>
                <outjar>${project.build.finalName}.jar</outjar>
                <includeDependency>true</includeDependency>

                <obfuscate>true</obfuscate>
                <proguardInclude>${basedir}/proguard.conf</proguardInclude>
                <injarNotExistsSkip>true</injarNotExistsSkip>
                <libs>
                    <lib>${java.home}/jmods</lib>
                    <lib>${java.home}/lib</lib>
                </libs>
                <archive>
                    <manifest>
                        <mainClass>Application</mainClass>
                        <packageName>com.abc</packageName>
                    </manifest>
                </archive>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>net.sf.proguard</groupId>
                    <artifactId>proguard-base</artifactId>
                    <version>6.2.2</version>
                    <scope>runtime</scope>
                </dependency>
            </dependencies>
        </plugin>

        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                    <configuration>
                        <mainClass>com.abc.Application</mainClass>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Моя конфигурация Proguard (proguard.conf) следующим образом

-ignorewarnings
-dontshrink
-dontoptimize
-keepdirectories
-adaptclassstrings
-useuniqueclassmembernames
-dontusemixedcaseclassnames
-flattenpackagehierarchy 'com.abc'
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod

-keep class com.abc.Application
-keep class * extends org.springframework.boot.ApplicationRunner

-keepclasseswithmembers public class * {
    public static void main(java.lang.String[]);
}

-keepclassmembers enum  * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keepclasseswithmembers,includedescriptorclasses,allowshrinking class * {
    native <methods>;
}

Когда я запускаю запутанный флягу, я получаю ошибку ниже

Исключение в потоке "main" java .lang.IllegalStateException: Не удалось получить вложенный архив для записи BOOT-INF / lib / spring-boot-starter-data-jpa-2.2.4.RELEASE.jar

Причина: java .lang.IllegalStateException: невозможно открыть вложенную запись "BOOT-INF / Библиотека / пружинные загрузки пускатель данные JPA-2.2.4.RELEASE.jar. Он был сжат и вложенные файлы JAR должны храниться без сжатия. Пожалуйста, проверьте механизм, используемый для создания вашего исполняемого файла JAR

...