在使用SpringBootMaven插件创建的嵌套可执行jar中启动主类
我有一个简单的Spring Boot类,如下所示:在使用SpringBootMaven插件创建的嵌套可执行jar中启动主类,maven,spring-boot,spring-boot-maven-plugin,Maven,Spring Boot,Spring Boot Maven Plugin,我有一个简单的Spring Boot类,如下所示: @SpringBootApplication public class Starter { public static void main(String... args) { if ("foo".equals(args[0])) { SpringApplication.run(Foo.class, args); } else if ("bar".equals(args[0]
@SpringBootApplication
public class Starter {
public static void main(String... args) {
if ("foo".equals(args[0])) {
SpringApplication.run(Foo.class, args);
} else if ("bar".equals(args[0])) {
SpringApplication.run(Bar.class, args);
}
}
}
Foo.java和Bar.java文件是作为依赖项嵌套在当前jar文件中的主要类文件,并用@SpringBootApplication注释。jar文件结构如下所示
├───BOOT-INF
│ ├───classes
│ │ ├───com
│ │ │ └───app
│ │ │ └───starter
│ │ │ └───Starter.class
| | |
│ │ └───config
│ └───lib
| ├───tool1.jar
| | └───Foo.java
| └───tool2.jar
| └───Bar.java
├───META-INF
│ └───maven
│ └───com.app.starter
│ └───starter
└───org
└───springframework
└───boot
└───loader
├───archive
├───data
├───jar
└───util
以下是Starter POM文件的摘录:
<project>
.....
<parent>
<groupId>com.app.myproject</groupId>
<artifactId>parent-tool</artifactId>
<version>1.0</version>
</parent>
<artifactId>starter</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.app.myproject</groupId>
<artifactId>foo-project</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>com.app.myproject</groupId>
<artifactId>bar-project</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<phase>none</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
有人能提出实现这一目标的方法吗?非常感谢您的任何想法。经过长时间的研究,在团队领导的帮助下,我终于找到了解决方案。这实际上是由SpringBootMaven插件创建的可执行jar依赖性问题。我的初学者类无法在依赖项列表中找到Foo.java或Bar.java,因为这些JAR也是可执行JAR。最后,我在我的foo项目和bar项目POM文件中添加了以下行:
<project>
.....
<parent>
<groupId>com.app.myproject</groupId>
<artifactId>parent-tool</artifactId>
<version>1.0</version>
</parent>
<artifactId>starter</artifactId>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.app.myproject</groupId>
<artifactId>foo-project</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>com.app.myproject</groupId>
<artifactId>bar-project</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<phase>none</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
org.springframework.boot
springbootmaven插件
没有一个
这使得foo项目和bar项目与一般项目不一样,一切都按预期进行
希望这对使用SpringBootMaven插件的人有所帮助