使用classLoader

时间:2019-01-21 12:38:56

标签: java spring spring-boot

我已经为我的案例寻找了很多解决方案,基本上我将在其他spring boot应用程序中启动/运行我的spring boot应用程序。

我如何尝试做:

String[] args = { "-Dspring.profiles.active=development",
                "-Dspring.config.location=config/example-db-development.properties,config/example-custom-development.properties",
                "-Dloader.path=test/lib" };

File fatJar = new File("D:/spring-boot-example/test/spring-boot-example-api.jar");

ClassLoader classLoader = new URLClassLoader(new URL[] { fatJar.toURI().toURL() });

Class<?> mainClass = classLoader.loadClass(getMainClassName(fatJar));
Method mainMethod = mainClass.getMethod("main", String[].class);
mainMethod.invoke(null, new Object[] { args });
private static String getMainClassName(File fatJar) throws IOException {
        try (JarFile jarFile = new JarFile(fatJar)) {
            return jarFile.getManifest().getMainAttributes().getValue(Attributes.Name.MAIN_CLASS);
        }
    }

这启动了示例项目,但是,我需要将示例项目的某些依赖项添加到应该启动该项目的项目中。 而且,springboot仍然无法创建bean,例如:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'vendaPDVControllerImpl' defined in URL [jar:file:/D:/dsv-git/dsv-java/pdv-prototipos/spring-boot-integrador-testes/test/spring-boot-integrador-api.jar!/BOOT-INF/classes!/br/com/sysmo/integrador/api/impl/VendaPDVControllerImpl.class]: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [br.com.sysmo.integrador.api.impl.VendaPDVControllerImpl] from ClassLoader [org.springframework.boot.loader.LaunchedURLClassLoader@31f924f5]

我不想在要启动它的项目上添加示例项目的依赖项,并且我已经在堆栈溢出中寻找解决方案,但是没有一个解决我的问题。

我想要这样的东西,但可以从classLoader或其他解决方案中进行,而该解决方案可以在不将其依赖项添加到我的项目的情况下启动我的应用程序:

java -jar -Dspring.profiles.active=development -Dspring.config.location=config/example-db-development.properties,config/example-custom-development.properties -Dloader.path=lib example-api-1.00.00.000.jar

0 个答案:

没有答案