Intellij spring boot PropertiesLauncher

3
我有一个Spring Boot应用程序(1.3.5.RELEASE),它被打包成一个jar文件,我想把jdbc驱动程序放在一个外部的libs文件夹中。所以我使用了PropertiesLauncher来搜索外部的jar文件。
当使用java -jar -Dloader.path=lib/时,它可以正常工作,但是在Intellij IDE中无法工作。这是一个导入到Intellij中的Maven项目。
你有什么提示吗?

你在 IDE 中如何启动你的应用程序? - Andy Wilkinson
我已经为此设置了运行配置。loader.path参数在application.properties文件中存在,并且也被设置为VM选项。它正在启动我的项目中的主类。 - Guido Zockoll
当你说“主类”时,你是指你的应用程序的主类还是PropertiesLauncher - Andy Wilkinson
是的,我指的是带有@SpringBootApplication注解的自己的类。 - Guido Zockoll
2个回答

6

在看过Andy的回答后,我决定分享一下我是如何解决这个问题的:

  1. I've added a profile for the dependency

    <profile>
        <id>intellij-properties-launcher</id>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-loader</artifactId>
                <version>2.0.6.RELEASE</version>
            </dependency>
        </dependencies>
    
    </profile>
    
  2. I activated the profile on Intellij on the maven tab

    Activation on IDE

  3. Changed the configuration according to andy Run Configuration

注意:Intellij Ultimate 2018.3版本会将配置标记为无效,但它仍能正常工作 :)

希望能对某些人有所帮助。


2
感谢您的精彩回答,对我帮助很大。 - Hanzhou Tang
谢谢!我现在可以通过这种方式添加我的application.properties(我的spring配置文件现在已经被加载,这些配置文件在jar包外的application.properties中指定),但是我无法打开其他资源。例如,我有一个x-something.properties文件也位于loader.path中,但它没有被添加到类路径中。有什么办法解决吗? - GieJay

5
当你使用PropertiesLauncher时,它会设置一个类加载器,其中包含配置的loader.path的内容,然后使用这个类加载器来加载和调用您的应用程序的主类。当您直接在IDE中启动应用程序的主类时,PropertiesLauncher不会参与,因此loader.path系统属性没有效果。
在IDE中可以使用PropertiesLauncher,但需要进行额外的配置。您需要配置一个运行配置,其中包含spring-boot-loader和您的应用程序在类路径上,并启动PropertiesLauncher。然后,您可以使用loader.main系统属性告诉PropertiesLauncher您应用程序的主类的名称。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接