Maven spring-boot:针对编译的jar运行

时间:2017-08-24 19:19:23

标签: java maven spring-boot

是否可以直接针对由于包目标而不是源创建的jar文件运行maven,特别是spring-boot:run目标?

我想这样做的原因是因为我想在Docker容器中运行一个Spring Boot应用程序,该容器具有热插拔类(存储在主机上并使用共享卷映射到容器中)使用Spring boot Devtools(可悲的是如果您使用Java -jar运行应用程序,则不起作用,我也不想将应用程序的源代码放在容器中。

1 个答案:

答案 0 :(得分:0)

classes参数不是可选的(通常使用标准Maven项目结构推断),但您可以为其提供一个空目录,然后使用folders参数包含以前打包的JAR。这是一个例子

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <mainClass>com.this.that.YourApplication</mainClass>
        <!-- any directory will do as long as (a) it exists and (b) it does not contain classes -->
        <classesDirectory>/tmp/</classesDirectory>
        <folders>
            <folder>
                <!-- the address, relative to the plugin's workingDirectory, of the 'original' application JAR -->
                tmp/lib/your-application.jar.original
            </folder>
        </folders>
    </configuration>
</plugin>

使用此配置,如果使用-X运行,您将看到Spring Boot插件生成的JVM的类路径中的前两个条目是(1)您的应用程序JAR和(2)空classes目录。例如:

[DEBUG] Classpath for forked process: <full_path_removed>/tmp/lib/your-application.jar.original:/tmp:

注意:

  • 您需要提供mainClass,因为您使用的原始JAR不包含META-INF / MANIFEST.MF中的Main-Class指令
  • 您需要引用“原始”JAR而不是Spring Boot打包的JAR,因为原始JAR是在其原始位置包含应用程序主类的那个(Spring Boot打包的JAR重定位它)。 LI>