【发布时间】:2023-03-30 08:58:01
【问题描述】:
我构建了 Spring Boot 应用程序,如果我用 mvn spring-boot:run 启动它,它运行良好,但尝试运行它 java -jar jarName.jar 会导致错误 Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'HomeService' available
这是我的 pom.xml 和 spring-boot-maven-plugin,就像这里描述的 https://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html 和这里 Spring-Boot Executable-Jar NoSuchBeanDefinitionException
<build>
<sourceDirectory>src/main/java</sourceDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/resources/${profileName}</directory>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<compilerArgument>-proc:none</compilerArgument>
</configuration>
</plugin>
<plugin>
<groupId>org.bsc.maven</groupId>
<artifactId>maven-processor-plugin</artifactId>
<version>2.2.4</version>
<executions>
<execution>
<id>process</id>
<goals>
<goal>process</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<!-- source output directory -->
<outputDirectory>target/metamodel</outputDirectory>
<!-- <processors> -->
<!-- <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor> -->
<!-- </processors> -->
<overwrite>true</overwrite>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.8.RELEASE</version>
<configuration>
<executable>true</executable>
<profiles>
<profile>dev</profile>
<profile>live</profile>
</profiles>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>live</id>
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<tasks>
<delete file="src/main/resources/application.properties" />
<copy file="src/main/resources/application-live.properties"
tofile="src/main/resources/application.properties" />
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>dev</id>
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<tasks>
<delete file="src/main/resources/application.properties" />
<copy file="src/main/resources/application-dev.properties"
tofile="src/main/resources/application.properties" />
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
这里是应用类
@Configuration
@EnableAutoConfiguration
@ComponentScan (basePackages = { "myProject.status" })
public class App {
private static final Logger logger = LogManager.getLogger(App.class);
public static void main(String[] args) throws BeansException, IOException, InterruptedException {
logger.info("APPLICATION STARTED");
ConfigurableApplicationContext context = SpringApplication.run(App.class, args);
logger.info(context.getBean(HomeService.class).home());
}
这里是家庭服务
package myProject.status.service;
@Service
public class HomeService {
public String home() {
return "application works";
}
}
我还尝试在 @PostConstruct 方法中获取一个 bean,其中一切和所有 Autowires 都应该准备好,它也不起作用。
mvn spring-boot:run 和 mvn package 有什么区别?我怎样才能构建正确的 jar?
谢谢!
【问题讨论】:
-
你应该只使用spring boot插件而不是使用Maven jar插件吗?
-
@PaulNUK 即使我禁用所有配置文件并从 pom an spring-boot-maven-plugin 配置中删除该部分,我也会收到相同的错误
-
引导时是否扫描了您的服务类?
-
看起来好像没有,所以我得到一个错误,但是为什么呢?它与 spring-boot:run 和 @ComponentScan (basePackages = { "myProject.status" }) 一起使用,包括它的包
标签: spring maven spring-boot jar executable-jar