2017-12-08 2 views
1

I Frühjahr Boot-Anwendung builded, die gut funktioniert, wenn ich es mit mvn spring-boot:run beginnen, aber versuchen, es java -jar jarName.jar Ergebnisse in Fehler zu laufen Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'HomeService' availableFrühjahr Boot jar NoSuchBeanDefinitionException

hier ist mein pom.xml mit spring-boot-maven-plugin wie es hier beschrieben wird https://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html und hier 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> 

hier App Klasse

@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()); 

} 

hier ist Homeservice

package myProject.status.service; 
@Service 
public class HomeService { 

    public String home() { 
     return "application works"; 
    } 
} 

Ich habe auch versucht, eine Bohne in @PostConstruct Verfahren zu bekommen, wo alles und alle Autowires sollten bereit sein, es funktioniert auch nicht.

Was ist der Unterschied zwischen mvn spring-boot:run und mvn package? Wie könnte ich das richtige Glas bauen?

Dank!

+0

Solltest du einfach das Spring Boot Plugin verwenden anstatt das Maven JAR Plugin? – PaulNUK

+0

@PaulNUK selbst wenn ich alle Profile deaktivieren und entfernen Sie diesen Abschnitt von POM eine Spring-Boot-Maven-Plugin-Konfiguration bekomme ich den gleichen Fehler – Slava

+0

Wird Ihre Serviceklasse beim Booten gescannt? – pvpkiran

Antwort

1

Sie können einfach $ mvn package spring-boot:repackage verwenden, um eine eigenständige ausführbare jar zu erstellen.

Der Unterschied zwischen mvn spring-boot:run und mvn spring-boot:repackage ist, dass spring-boot:run für lokale laufen und debuggen, während spring-boot:repackage ist für den Einsatz zu verpacken.

Außerdem müssen Sie <packaging>jar</packaging> angeben.

Ein weiterer Kommentar für App.java, Sie können nur eine Anmerkung als @SpringBootApplication verwenden. Es würde alle Ihre drei Anmerkungen abdecken, vorausgesetzt, App.java ist in Paket myProject.status.

+0

Danke für Ihren Rat, aber es hilft nicht, immer noch der gleiche Fehler. Ich habe sogar den JAR-Modus zur Spring-Boot-Maven-Plugin-Konfiguration hinzugefügt. Ich bekomme das gleiche Glas. Es sieht so aus, als würde das Ausführen von "jar" nicht nach "Autowire" suchen.Es ist nicht das erste meiner Spring Boot-Projekt und es hat vorher funktioniert. Aber jetzt nicht. – Slava

+0

Andere Projekte wurden mit Springboot-Anwendung kommentiert und vielleicht ist es der entscheidende Punkt. Hier konfiguriere ich mehrere Datenquellen, die mit Autokonfiguration für mich nicht funktionieren. Also habe ich es manuell kommentiert. Ich versuche einen möglichen Unterschied zwischen diesen Annotationen und der Art des Laufs von jar zu finden. – Slava

+0

@Slava, wenn Sie Ihren Code irgendwo drücken können, können wir von dort debuggen. – chenrui

0

Ich löste mein Problem. Es ist verwirrend, also werde ich versuchen herauszufinden, warum es so ist. Um Glas laufen soll ich (basePackages = { "myProject.status" })

@ComponentScan (basePackages = { "myProject.status" }) Arbeiten mit mvn spring-boot:run aber nur reinen @ComponentScan Werken aus Glas entfernen. Eigentlich ist es wirklich mein Wurzelverzeichnis, also brauche ich es nicht, aber die Frage, warum es nicht von jar funktioniert, ist geöffnet. Alle Klassen befinden sich in diesem Stammverzeichnis, also sollte es dort gefunden werden, aber möglicherweise werden keine Abhängigkeiten von jar gescannt.

Danke an alle, die mir geantwortet haben!

Verwandte Themen