스프링 부트 메이븐 플러그인. LayoutFactory 새로운 기능. 1.5.0.M1부터 사용 가능합니다.커스텀 레이아웃을 사용할 때 Custom Launcher ClassNotFound 예외
나는 사용자 레이아웃에서 사용자 정의 실행 정의 할 때 내가하는 데 문제가 :
나는 부팅 응용 프로그램 소스 내 사용자 정의 발사기를 포함하는 경우@Override public String getLauncherClassName() { return "com.mycompany.CustomLauncher"; }
, 그것은/클래스 BOOT-INF에 재 포장, 언제 도착을 JAR을 실행하려고하면 ClassNotFound 예외가 발생합니다.
나는 리팩커드 코드를 읽었지 만 리 패키징 시퀀스에서 주어진 클래스를 선택적으로 제외시킬 수있는 훅을 찾을 수 없다. 내 레이아웃에서 getRepackagedClassesLocation 메소드를 오버라이드하면 부트 메인 클래스가 다른 클래스 로더에 의해로드되고 SpringBoot ClassNotFound에서 실패합니다.
BOOT-INF/classes 리 패키징에서 실행 프로그램을 강제 실행할 수있는 방법이 있습니까?
UPDATE 코드 내가이 시험을 추가 한 액세스 할 수 있음을 참조하기 위해 1
@Override
public void writeLoadedClasses(LoaderClassesWriter writer) throws IOException
{
String name = PropertiesLauncherInternal.class.getName().replaceAll("\\.", "\\\\") + ".class";
InputStream inputStream = PropertiesLauncherInternal.class.getResourceAsStream(PropertiesLauncherInternal.class.getSimpleName() + ".class");
writer.writeEntry(name, inputStream);
writer.writeLoaderClasses();
}
:
BOOT-INF/--1
BOOT-INF/classes/--1
BOOT-INF/classes/com/-0
BOOT-INF/classes/com/test/-0
BOOT-INF/classes/com/test/Boot.class-2405822989
...
com\launcher\PropertiesLauncherInternal.class--1
: 나는 다음과 같은 로그를 얻을 첫 번째 루프를 들어
JarInputStream is = new JarInputStream(new FileInputStream(new File("c:/git/dev/framework/boot/target/boot-current-SNAPSHOT.jar")), true);
JarEntry entry = null;
while (null != (entry = is.getNextJarEntry()))
{
System.out.println(entry.getName() + "-" + entry.getCrc());
}
URL url = new File("c:/git/dev/framework/boot/target/boot-current-SNAPSHOT.jar").toURL();
URL[] urls = new URL[] { url };
ClassLoader cl = new URLClassLoader(urls);
Class cls = cl.loadClass("com.test.Boot");
Class cls = cl.loadClass("com.launcher.PropertiesLauncherInternal");
을
클래스 이름 옆에있는 숫자는 CRC입니다. 관련성이 있는지는 모르겠지만 CRC-32는 알 수 없습니다.
는 는 클래스 로더를 사용하는 경우, 내가 com.test.Boot를로드 할 수 있어요하지만 응용 프로그램 코드와 함께 그것을하는 것보다 오히려 PropertiesLauncherInternal.class
안녕하세요, Andy, 그 일을 시도하고 내 발사대가 포장 얻을. 그러나 JAR을 실행하려고하면 ** 오류 : 기본 클래스를 찾을 수 없거나로드 할 수 없습니다 **. 동일한 클래스 (동일한 내용, 동일한 이름)를 JAR의 동일한 위치에 수동으로 복사하면 작동합니다. 문제가 뭔지 알 겠어? –
아니요, 죄송합니다. 문제를 재현하는 코드를 공유 할 수 있습니까? –
원래 질문에 대한 세부 정보를 추가했습니다. –