web-dev-qa-db-fra.com

Impossible d'exécuter Java avec le code de sortie Spring + Maven 1

Je suis nouveau sur Spring/Maven et je suis ce tutoriel: Servir du contenu Web avec Spring MVC .

Chaque fois que je lance mvn spring-boot:run, j'obtiens cette erreur:

Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.5.2.RELEASE:run (default-cli) on project gs-serving-web-content: Could not exec Java: Application finished with exit code: 1 ->

J'ai essayé d'ajouter classpath, j'ai essayé d'exécuter mvn install clean spring-boot:run, j'ai fait beaucoup d'autres choses que les gens ont suggérées sur stackoverflow dans des situations similaires, y ayant passé plus de 8 heures - aucune utilisation. 

Voici ma classe principale Application.Java:

package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) throws Exception{
        SpringApplication.run(Application.class, args);
    }
}

Voici ma classe GreeetingController.Java:

package hello;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class GreetingController {

    @RequestMapping("/greeting")
    public String greeting(@RequestParam(value="name", required=false, defaultValue="World") String name, Model model) {
        model.addAttribute("name", name);
        return "greeting";
    }

}

Voici mon fichier pom.xml:

<?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-serving-web-content</artifactId>
    <version>0.1.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!-- Exclusions to allow SpringBoot execute on HCP -->
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-Tomcat</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.Apache.Tomcat.embed</groupId>
                    <artifactId>Tomcat-embed-el</artifactId>
                </exclusion>
                <exclusion>
                    <artifactId>logback-classic</artifactId>
                    <groupId>ch.qos.logback</groupId>
                </exclusion>
            </exclusions>
        </dependency>

    </dependencies>

    <properties>
        <Java.version>1.8</Java.version>
        <!-- The main class to start by executing Java -jar -->


    </properties>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                                    <mainClass>hello.Application</mainClass>

        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
            </manifest>
        </archive>
    </configuration>
            </plugin>
        </plugins>
    </build>

</project>

Voici mon modèle HTML:

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Getting Started: Serving Web Content</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <p th:text="'Hello, ' + ${name} + '!'" />
</body>
</html>

La structure d'un projet est

src/main/Java/hello/pom.xml
src/main/Java/hello/Application.Java
src/main/Java/hello/GreetingController.Java
src/main/resources/templates/greeting.html
5
NiHao92

J'ai apporté les modifications suivantes pour que mvn clean spring-boot:run fonctionne:

  • Déplacez pom.xml vers le répertoire racine, ce qui rend la hiérarchie de répertoires suivante:

Hiérarchie d'annuaire:

.
├── pom.xml
└── src
    └── main
        ├── Java
        │   └── hello
        │       ├── Application.Java
        │       └── GreetingController.Java
        └── resources
            └── templates
                └── greeting.html
  • Commenté la extensions dans la partie suivante:

Partie commentée:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <!-- Exclusions to allow SpringBoot execute on HCP -->
        <!--<exclusions>-->
            <!--<exclusion>-->
                <!--<groupId>org.springframework.boot</groupId>-->
                <!--<artifactId>spring-boot-starter-Tomcat</artifactId>-->
            <!--</exclusion>-->
            <!--<exclusion>-->
                <!--<groupId>org.Apache.Tomcat.embed</groupId>-->
                <!--<artifactId>Tomcat-embed-el</artifactId>-->
            <!--</exclusion>-->
            <!--<exclusion>-->
                <!--<artifactId>logback-classic</artifactId>-->
                <!--<groupId>ch.qos.logback</groupId>-->
            <!--</exclusion>-->
        <!--</exclusions>-->
    </dependency>

Il semble que vous vouliez exclure ces dépendances. mvn clean spring-boot:run va simplement se terminer avec succès si Tomcat intégré est exclu, mais je pense que c'est le comportement correct, car il n'y a pas de conteneur pour déployer l'application. Quoi qu'il en soit, vous pouvez l'essayer et apporter des modifications en fonction de vos besoins.

2
shizhz

Parfois, le port peut simplement être déjà utilisé. Assurez-vous de tuer tous les processus Java avant d'exécuter une application.

1
Komal