maven-build-Fehler beim generieren von Krieg-Paket für spring-boot-Anwendung?
Dies ist eine Erweiterung meiner vorherigen Frage hier an SO. Laut diesem post, main-Methode ist NICHT erforderlich, um eine deployable war
Ich versuche zu generieren, die eine deployable war
für diese einfache Anwendung von hochladen von Dateien. Der Quellcode für dieses Beispiel finden Sie hier.
Gemäß den Anweisungen von spring boot für jar-Krieg-Konvertierung, änderte ich meine pom.xml
zu reflektieren, den folgenden. (Nur Hinzugefügt tomcat
Abhängigkeit mit dem Umfang provided
).
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework</groupId>
<artifactId>gs-uploading-files</artifactId>
<version>0.1.0</version>
<packaging>war</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.3.RELEASE</version>
</parent>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<properties>
<java.version>1.7</java.version>
</properties>
<repositories>
<repository>
<id>spring-releases</id>
<name>Spring Releases</name>
<url>https://repo.spring.io/libs-release</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-releases</id>
<name>Spring Releases</name>
<url>https://repo.spring.io/libs-release</url>
</pluginRepository>
</pluginRepositories>
</project>
Dann änderte ich Application.java
wie folgt
@SpringBootApplication
public class Application extends SpringBootServletInitializer{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
/*public static void main(String[] args) {
SpringApplication.run(Application.class, args);
} */
}
Ich habe versucht, zwei Szenarien. sowohl mit dem folgenden Fehler fehl (Unable to find main class
).
- Keine main-Methode (HINWEIS: ich habe auskommentiert main-Methode oben)
- Keine application.Java Datei (auskommentiert alles aus dieser Datei - hier nicht gezeigt)
Fehler:
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.218s
[INFO] Finished at: Thu Apr 23 11:46:24 PDT 2015
[INFO] Final Memory: 22M/222M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.2.3.RELEASE:repackage (default) on project gs-uploading-files: Execution default of goal org.springframework.boot:spring-boot-maven-plugin:1.2.3.RELEASE:repackage failed: Unable to find main class -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException
PS: wenn ich die main-Methode intakt, der build ist erfolgreich
- Eine chance haben Sie immer noch einen Verweis zu deiner main-Klasse in der pom.xml?
- Ich bin mir nicht sicher, was Sie genau meinen. Ich habe aktualisiert mit meinem ganzen pom.xml
- Andere als die Antworten auf deine verlinkte Frage, die ich nicht finden konnte keine Beweise dafür, dass Sie weglassen können, die main-Klasse, d.h. eine Klasse mit main-Methode. Die spring-boot-maven-plugin zu sein scheint, um ihn zu suchen. Vielleicht, wenn Sie nicht das plugin nutzen, aber nicht sicher, ob der sich lohnt.
- Wenn Sie nur wollen, um die Anwendung auszuführen als ein standard-war-Datei, können Sie entweder entfernen Sie die Boot-plugin vollständig oder es so konfigurieren, dass das Verpacken Ziel ist nicht gebunden an Maven-Lebenszyklus
- für die Prüfung, lokal, würde ich lieber einen embedded Tomcat. aber für die Bereitstellung, ich muss einen Krieg. Ich bin nicht sicher, wie kann ich sowohl die Vorteile hier
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie möchten, zu bekommen, beide die Vorteile - also standalone-executable-Krieg mit embedded Tomcat und den normalen Krieg einsetzbar bei externen Tomcat - Sie brauchen, um eine Klasse mit main-Methode. So,
spring-boot-maven-plugin
an die Klasse mit der main-Klasse (Frühjahr sollte es jedenfalls, wenn Sie eine haben, aber gut zu explizit sein denke ich):<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot-version}</version>
<configuration>
<mainClass>the.package.of.Application</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
spring-boot-starter-tomcat
Abhängigkeit in Ihrem pom mitprovided
Umfang. Spring boot magisch weiß, wie zu aktivieren/deaktivieren embedded Tomcat.Mit dieser sollten Sie in der Lage sein, um starten Sie Ihren Frühling-app aus der IDE läuft gerade die Application.java Klasse wie eine normale Java-Anwendung, erstellen Sie eine war-Datei, die sowohl standalone lauffähig und einsetzbar bei externen Tomcat wie gewohnt zu.
Ich bin derzeit der Aufbau von REST-APIs mit Spring Boot 1.0.1.RELEASE-mit dieser Art von setup und es funktioniert Super in allen drei Modi.
main
. Ich sonst nicht bekommen kann es arbeiten.spring-boot-maven-plugin
an alle, die in Ihrer pom.war
bereitgestellt werden. ist das entfernenspring-boot-maven-plugin
, kann ich nur loswerdenmain method
suchen oder etwas wichtiges verloren zu haben?spring-boot-maven-plugin
und die main-Methode sollte nur das nehmen sich die standalone-executable - /embedded-Tomcat-Funktion, die vor Krieg, sonst nichts (gerade getestet, auf meine Bewerbung und fein gearbeitet :))Hinweis, dass man sich eine etwas ähnliche Nachricht entlang der Linien von
Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.3.2.RELEASE:Verpacken (Standard) bei Projekt Xyz: Ausführung Standard-goal org.springframework.boot:spring-boot-maven-plugin:1.3.2.RELEASE:packen fehlgeschlagen: Nicht in der Lage zu finden, eine einzige main-Klasse von der folgenden Kandidaten [Kom.ein.Anwendung, com.ein.fake.Anwendung, com.ein.main.Main1, com.ein.runner.DataImportRunner, com.ein.temp.dependencyinjection.MainApp, com.ein.finalapp.Fassade.impl.V3DataImports, com.ein.finalapp.service.impl.App2]
(Das sah ich in meiner Anwendung beim ausführen einer Maven-Installation)
In meinem Fall hatte ich mehrere main-Methoden und-Feder konnte nicht automatisch wählen, die ich wollte.
Die Lösung ist die gleiche weiter oben beschrieben durch Naymesh Mistry (explizit angeben.main.Klasse.mit.Paket.Präfix in pom.xml)