[SPRING] Proguard는 수업을 찾을 수 없다고 말하고 있습니다.
SPRINGProguard는 수업을 찾을 수 없다고 말하고 있습니다.
나는 봄 mvc 응용 프로그램과 maven proguard를 사용하고 있습니다.
내 pom.xml 빌드 섹션은 다음과 같습니다.
<build>
<finalName>myapp</finalName>
<plugins>
<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>-keep public class</option>-->
<!--</options>-->
<injar>${project.build.finalName}</injar>
<injar>${project.build.finalName}</injar>
<inFilter>com.myapp.*</inFilter>
</configuration>
</plugin>
</plugins>
나는 또한 시험했다 :
<injar>${project.build.finalName}.war</injar>
내가 달릴 때 :
mvn clean install
빌드 실패 메시지 :
[proguard] Reading program war [/Users/me/dev/git/myproject/myapp/target/myapp.war] (filtered)
[proguard] Error: The input doesn't contain any classes. Did you specify the proper '-injars' options?
ERROR] Failed to execute goal com.pyx4me:proguard-maven-plugin:2.0.4:proguard (default) on project myapp: Obfuscation failed (result=1) -> [Help 1]
그것은 쇼 전에 메시지로 정확하게 내 항아리를 데리러 것으로 보인다 :
[INFO] --- proguard-maven-plugin:2.0.4:proguard (default) @ myapp ---
[INFO] execute ProGuard [-injars, '/Users/me/dev/gitserver/myproject/myapp/target/myapp.war'(!META-INF/maven/**,com.myapp.*), -outjars, '/Users/me/dev/git/myproject/myapp/target/myapp_pg.war', -libraryjars, ....
또한 어떤 옵션을 사용 하시겠습니까? 이것은 스프링 mvc이므로 다음과 같은 주석이 있습니다.
따라서 이러한 클래스 / 필드는 내가 상상하는 이름으로 변경하면 안됩니다.
(목표는 단지 디 컴파일 (decompile)을하는 사람에게 두통을 일으켜 코드를 디 컴파일하고 사용할 수 없도록하기 위해서이다. 난독 화 (obfuscating)는 코드베이스를 사용하게하지만 코드베이스를 유지 보수 할 수는 없다. 나는 그와 같은면에서 숨길 것이 전혀없는 멋진 알고리즘을 가지고 있지 않다.)
최신 정보
여기서 mvn clean install을 할 때 myapp.war 파일과 exploded war myapp /를 생성 할 때 어떤 이유로 든 maven을 사용하는 mvc (maven을 처음 사용하는 사람)을 명확히 해두겠습니다. (이것은 내가 배치하고자하는 것입니다. myapp.war 파일이 아닌 제작).
myapp 폴더에는 다음 항목이 있습니다.
/target/myapp/
/target/myapp/meta-inf (empty folder)
/target/myapp/web-inf
/target/myapp/web-inf/classes (com.myapp. ...)
/target/myapp/web-inf/lib/
/target/myapp/web-inf/ web.xml, application.xml (for spring)
/target/myapp/web-inf/views/
따라서 proguard는 / target / myapp / web-inf / classes 폴더에서 난독 화되어야합니다. 그렇게하도록 어떻게 말합니까?
업데이트 2
나는 이것을 지금 얻고있다 :
OK, 나는 얻지 못한다 : 목표를 실행하지 못했다 ... proguard .. / Users / me / dev / git / project1 / myapp / target / myapp / web-inf / classes의 이름을 바꿀 수 없다. 내 pom.xml에서 변경됨)
내 pom.xml을 다음과 같이 변경했습니다.
<configuration>
<obfuscate>true</obfuscate>
<injar>${project.build.finalName}/WEB-INF/classes/</injar>
<inFilter>com/myapp/**</inFilter>
</configuration>
해결법
-
==============================
1.ProGuard 필터는 파일 이름에서 작동하므로
ProGuard 필터는 파일 이름에서 작동하므로
.....(!META-INF/maven/**,com.myapp.*)
아마도 어떤 클래스 파일과도 일치하지 않을 것입니다. 너는 아마 원할거야.
.....(!META-INF/maven/**,com/myapp/**)
ProGuard 매뉴얼> 사용법> 파일 필터를 참조하십시오.
-
==============================
2.당신은 당신의 전체 pom을 게시 할 수 있습니까?
당신은 당신의 전체 pom을 게시 할 수 있습니까?
일반적으로 Maven은 / target / classes (WAR 파일의 경우에도)로 컴파일되고 WAR 플러그인은 패키지 단계 직전에 web-inf / classes에 복사를 수행합니다. Maven을 사용하여 수동으로 클래스를 web-inf / lib로 컴파일해서는 안됩니다.
편집 : 좋아,이 꽤 연구가 걸릴 수 있지만 당신을 위해 대답을 찾았습니다. 첫째, ProGuard 문서에 따르면, 당신은 당신의 전쟁 프로젝트에 어떤 클래스도 가져서는 안됩니다 :
웹 클래스가 별도의 병에 구축되도록 프로젝트를 리팩토링해야합니다. 일단 jar 프로젝트를 빌드하고 나면, 그것을 당신의 전쟁 프로젝트의 의존성으로 추가해야합니다.
일단 그 설정을 만들었 으면 다음 구성으로 전쟁 프로젝트를 성공적으로 만들 수있었습니다 :
<build> <plugins> <plugin> <groupId>com.pyx4me</groupId> <artifactId>proguard-maven-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>proguard</goal> </goals> </execution> </executions> <configuration> <inFilter>com/example/**</inFilter> <libs> <lib>${java.home}/lib/rt.jar</lib> <lib>${java.home}/lib/jsse.jar</lib> </libs> <options> <option>-keep class com.example.echo.EchoServlet</option> <option>-injar ${project.build.directory}/${project.build.finalName}.${project.packaging}</option> <option>-outjar ${project.build.directory}/${project.build.finalName}-proguarded.${project.packaging}</option> </options> </configuration> </plugin> </plugins> </build>
"com.example.echo.EchoServlet"을 주목하십시오. progaurd가 클래스의 이름을 변경하려고했기 때문에이 서블릿 이름을 "유지"해야만 WAR 프로젝트의 web.xml에서 참조 할 수있었습니다. 어노테이션 기반 서블릿 구성을 사용하는 경우 이것이 필요하지 않을 것이라고 생각합니다.
from https://stackoverflow.com/questions/8845406/proguard-is-saying-it-cant-find-any-classes by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 포스트 구조로 봄 콩 테스트하기 (0) | 2019.03.29 |
---|---|
[SPRING] 봄 데이터 Redis 만료 키 (0) | 2019.03.29 |
[SPRING] applicationContext.xml에서 환경 변수 읽기 (0) | 2019.03.29 |
[SPRING] Scope을 기반으로 @PreAuthorize를 사용하여 스프링 보안 oauth 리소스를 보호하려면 어떻게해야합니까? (0) | 2019.03.29 |
[SPRING] @IfProfileValue를 사용하여 프로필이 활성 상태인지 테스트하려면 어떻게해야합니까? (0) | 2019.03.29 |