Java Maven、Proguard和一个我不知道的罐子';我不想要

Java Maven、Proguard和一个我不知道的罐子';我不想要,java,deployment,maven,proguard,Java,Deployment,Maven,Proguard,我在观察一个带有proguard maven插件的项目。除了一件事之外,一切都正常:我不想要原始的jar,既不在目标目录中,也不部署在存储库中。现在,我得到了原始的罐子和废弃的罐子。保持这种方式会在我们的buildserver中引起问题,因为这两个工件都将被部署,从而导致类路径中出现重复的接口。在buildserver上使用黑名单不是一个选项 有什么想法吗 谢谢大家! 根据Maven中Proguard插件的文档,如果不指定outjar参数,它将覆盖输入jar 您只需指定指向同一jar的injar

我在观察一个带有proguard maven插件的项目。除了一件事之外,一切都正常:我不想要原始的jar,既不在目标目录中,也不部署在存储库中。现在,我得到了原始的罐子和废弃的罐子。保持这种方式会在我们的buildserver中引起问题,因为这两个工件都将被部署,从而导致类路径中出现重复的接口。在buildserver上使用黑名单不是一个选项

有什么想法吗


谢谢大家!

根据Maven中Proguard插件的文档,如果不指定outjar参数,它将覆盖输入jar


您只需指定指向同一jar的injar和outjar参数,proguard将覆盖原始jar

My proguard设置(此设置适用于java 6,适用于java 7,相应地更改groupid、artifactid和版本):


com.pyx4me
proguard maven插件
2.0.4
进程类
前卫
真的
假的
班级
512m
-keepattributes*注释*
-允许访问修改
-DontskipnonPublicLibraryClass
-dontskipnonpubliclibraryclassmembers
-dontusemixedcaseclassnames
-dontshrink
net.sf.proguard
前卫
4.4
运行时

HTH.

将配置选项
attach
设置为true似乎会替换原始项目工件


如果有人有此问题,以下配置对我有效。这会将原始jar重命名为{final name}\u proguard\u base.jar,并用已处理的jar覆盖项目jar

        <plugin>
                <groupId>com.github.wvengen</groupId>
                <artifactId>proguard-maven-plugin</artifactId>
                <version>2.0.6</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>proguard</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <proguardVersion>${proguard.version}</proguardVersion>
                    <obfuscate>false</obfuscate>
                    <injarNotExistsSkip>true</injarNotExistsSkip>
                    <injar>${project.build.finalName}.jar</injar>
                    <outputDirectory>${project.build.directory}</outputDirectory>
                    <addMavenDescriptor>true</addMavenDescriptor>
                    <attach>false</attach>
                    <libs>
                        <lib>${java.home}/lib/rt.jar</lib>
                        <lib>${java.home}/lib/jsse.jar</lib>
                        <lib>${java.home}/lib/jce.jar</lib>
                    </libs>
                    <proguardInclude>${project.basedir}/proguard.conf</proguardInclude>
                    <options>
                        <option>-printseeds ${project.build.directory}/proguard-seeds.txt</option>
                        <option>-printusage ${project.build.directory}/proguard-shrinkusage.txt</option>
                        <option>-printmapping ${project.build.directory}/proguard-mapping.txt</option>
                        <option>-printconfiguration ${project.build.directory}/proguard-config.txt</option>
                        <option>-dontobfuscate</option>
                        <option>-keepdirectories</option>
                        <option>-dontskipnonpubliclibraryclasses</option>
                        <option>-dontskipnonpubliclibraryclassmembers</option>
                    </options>                  
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>net.sf.proguard</groupId>
                        <artifactId>proguard-base</artifactId>
                        <version>${proguard.version}</version>
                    </dependency>
                </dependencies>
            </plugin>

com.github.wvengen
proguard maven插件
2.0.6
包裹
前卫
${proguard.version}
假的
真的
${project.build.finalName}.jar
${project.build.directory}
真的
假的
${java.home}/lib/rt.jar
${java.home}/lib/jsse.jar
${java.home}/lib/jce.jar
${project.basedir}/proguard.conf
-printseeds${project.build.directory}/proguard-seeds.txt
-printusage${project.build.directory}/proguard-shrinkusage.txt
-printmapping${project.build.directory}/proguard-mapping.txt
-printconfiguration${project.build.directory}/proguard-config.txt
-顿托夫斯卡特
-保留董事
-DontskipnonPublicLibraryClass
-dontskipnonpubliclibraryclassmembers
net.sf.proguard
前卫基地
${proguard.version}

我尝试了每个参数,但都不起作用。如果我按照这些说明操作,就会得到一个project-small.jar。但是没有project.jar.and参数?我在任何地方都看不到这个,你能说得更具体一点吗?@贴花:更新的答案,似乎“”标记被SO忽略了,我写了“使用和参数”,但在SO中它显示为“使用和参数”。
        <plugin>
                <groupId>com.github.wvengen</groupId>
                <artifactId>proguard-maven-plugin</artifactId>
                <version>2.0.6</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>proguard</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <proguardVersion>${proguard.version}</proguardVersion>
                    <obfuscate>false</obfuscate>
                    <injarNotExistsSkip>true</injarNotExistsSkip>
                    <injar>${project.build.finalName}.jar</injar>
                    <outputDirectory>${project.build.directory}</outputDirectory>
                    <addMavenDescriptor>true</addMavenDescriptor>
                    <attach>false</attach>
                    <libs>
                        <lib>${java.home}/lib/rt.jar</lib>
                        <lib>${java.home}/lib/jsse.jar</lib>
                        <lib>${java.home}/lib/jce.jar</lib>
                    </libs>
                    <proguardInclude>${project.basedir}/proguard.conf</proguardInclude>
                    <options>
                        <option>-printseeds ${project.build.directory}/proguard-seeds.txt</option>
                        <option>-printusage ${project.build.directory}/proguard-shrinkusage.txt</option>
                        <option>-printmapping ${project.build.directory}/proguard-mapping.txt</option>
                        <option>-printconfiguration ${project.build.directory}/proguard-config.txt</option>
                        <option>-dontobfuscate</option>
                        <option>-keepdirectories</option>
                        <option>-dontskipnonpubliclibraryclasses</option>
                        <option>-dontskipnonpubliclibraryclassmembers</option>
                    </options>                  
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>net.sf.proguard</groupId>
                        <artifactId>proguard-base</artifactId>
                        <version>${proguard.version}</version>
                    </dependency>
                </dependencies>
            </plugin>