Проблемы с Maven, Proguard и сборкой

Я пытаюсь заставить Maven работать с ProGuard.

Я хочу добиться следующего:

  • Запустите ProGuard над моими исходными файлами и создайте обфусцированные классы

  • Создайте файл манифеста, который ссылается на основной класс, чтобы я мог выполнить его как банку

  • Распакуйте все связанные библиотеки jar и создайте одну огромную jar, содержащую их все. Этот файл должен контактировать только с файлами .class и .xml.

  • Соберите их в файлы .zip и tar.gz, которые включают различные файлы README.txt и так далее.

Пока что у меня получилось что-то вроде этого:

        <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>

Но у меня нет радости. Может ли кто-нибудь дать мне какие-нибудь туманные указания по этому поводу?

Заранее спасибо, Мэтт


person Sway    schedule 19.05.2009    source источник
comment
@starblue Maven не имеет [assemblies] концепции. Однако [assembly] - очень верный. Поэтому, пожалуйста, перестаньте вести себя так, будто теги предназначены для уникальных доменов, исключая все, что не соответствует вашему видению их использования. Теги предназначены для установки, добавьте больше ограничений. Не запрещайте мне использовать тег, который применим и к Maven. Это чертовски раздражает.   -  person Pascal Thivent    schedule 02.08.2010
comment
maven.apache.org/plugins/maven-assembly-plugin: это плагин генерирует сборки.   -  person starblue    schedule 07.08.2010


Ответы (1)


Вот конфигурация, которая сработала для меня

<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>

Последняя банка - это finalName-small.jar.

person David Rabinowitz    schedule 20.05.2009
comment
Есть ли причина, по которой вы используете фазу пакета, а не фазу классов процессов? Классы процессов запускаются после компиляции, но перед пакетом, поэтому вы можете получить доступ к целевым классам / классам до того, как они будут повреждены. - person sal; 22.05.2009
comment
Прошло некоторое время, но насколько я помню, я обнаружил, что плагин в основном запускает proguard, поэтому ему нравится получать одну банку и выдавать другую. Другими словами - много проб и ошибок, этот работает ... - person David Rabinowitz; 23.05.2009
comment
как вы работаете с несколькими модулями Maven в одном проекте? вы запускаете плагин в корневом файле pom.xml, запускаете ли вы его в сборке модуля веб-интерфейса и т. д.? - person Alex; 24.05.2012
comment
К сожалению, никогда не работал с несколькими артефактами в одном проекте. - person David Rabinowitz; 15.02.2013