2016-07-16 20 views
9

Zmieniam systemy kompilacji z maven na gradle dla projektu wiosennego rozruchu. Otrzymuję ten StackTraceorg.springframework.boot.web.support nie istnieje

19:03:08: Executing external task 'bootRun'... 
/home/dac/proj/spring-boot-master/spring-boot-samples/spring-boot-sample-jetty-jsp/src/main/java/sample/jetty/jsp/SampleJettyJspApplication.java:22: error: package org.springframework.boot.web.support does not exist 
import org.springframework.boot.web.support.SpringBootServletInitializer; 
             ^
/home/dac/proj/spring-boot-master/spring-boot-samples/spring-boot-sample-jetty-jsp/src/main/java/sample/jetty/jsp/SampleJettyJspApplication.java:25: error: cannot find symbol 
public class SampleJettyJspApplication extends SpringBootServletInitializer { 
              ^
    symbol: class SpringBootServletInitializer 
/home/dac/proj/spring-boot-master/spring-boot-samples/spring-boot-sample-jetty-jsp/src/main/java/sample/jetty/jsp/SampleJettyJspApplication.java:27: error: method does not override or implement a method from a supertype 
    @Override 
    ^
3 errors 
:compileJava FAILED 

FAILURE: Build failed with an exception. 

* What went wrong: 
Execution failed for task ':compileJava'. 
> Compilation failed; see the compiler error output for details. 

* Try: 
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 

BUILD FAILED 

Total time: 2.334 secs 
Compilation failed; see the compiler error output for details. 
19:03:10: External task execution finished 'bootRun'. 

My build.gradle

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath "org.springframework.boot:spring-boot-gradle-plugin:1.3.6.RELEASE" 
     classpath 'org.springframework:springloaded:1.2.5.RELEASE' 
    } 
} 

apply plugin: 'java' 
apply plugin: 'eclipse' 
apply plugin: 'idea' 
apply plugin: 'spring-boot' 
apply plugin: 'rebel' 

buildscript { 
    repositories { 
     mavenCentral() 
    } 

    dependencies { 
     classpath group: 'org.zeroturnaround', name: 'gradle-jrebel-plugin', version: '1.1.3' 
    } 
} 
jar { 
    baseName = 'gs-spring-boot' 
    version = '0.1.0' 
} 

repositories { 
    mavenCentral() 
} 

sourceCompatibility = 1.8 
targetCompatibility = 1.8 

dependencies { 
    // tag::jetty[] 
    compile("org.springframework.boot:spring-boot-starter-web") { 
     exclude module: "spring-boot-starter-tomcat" 
    } 
    compile("org.springframework.boot:spring-boot-starter-jetty") 
    // end::jetty[] 
    // tag::actuator[] 
    compile("org.springframework.boot:spring-boot-starter-actuator") 

    testCompile("org.springframework.boot:spring-boot-starter-test") 
    testCompile("junit:junit") 

} 

// change default IntelliJ output directory for compiling classes 
idea { 
    module { 
     inheritOutputDirs = false 
     outputDir = file("$buildDir/classes/main/") 
    } 
} 

task wrapper(type: Wrapper) { 
    gradleVersion = '2.3' 
} 

My 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> 
    <parent> 
     <!-- Your own application should inherit from spring-boot-starter-parent --> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-samples</artifactId> 
     <version>1.4.0.BUILD-SNAPSHOT</version> 
    </parent> 
    <artifactId>spring-boot-sample-jetty-jsp</artifactId> 
    <packaging>war</packaging> 
    <name>Spring Boot Jetty JSP Sample</name> 
    <description>Spring Boot Jetty JSP Sample</description> 
    <url>http://projects.spring.io/spring-boot/</url> 
    <organization> 
     <name>Pivotal Software, Inc.</name> 
     <url>http://www.spring.io</url> 
    </organization> 
    <properties> 
     <main.basedir>${basedir}/../..</main.basedir> 
     <m2eclipse.wtp.contextRoot>/</m2eclipse.wtp.contextRoot> 
    </properties> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
      <exclusions> 
       <exclusion> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-starter-tomcat</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-validation</artifactId> 
      <exclusions> 
       <exclusion> 
        <groupId>org.apache.tomcat.embed</groupId> 
        <artifactId>tomcat-embed-el</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-jetty</artifactId> 
      <!--<scope>provided</scope>--> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.eclipse.jetty</groupId> 
      <artifactId>apache-jsp</artifactId> 
      <!--<scope>provided</scope>--> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
       <configuration> 
        <executable>true</executable> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <configuration> 
        <useSystemClassLoader>false</useSystemClassLoader> 
       </configuration> 
      </plugin> 



     </plugins> 
    </build> 
</project> 

Jak mam zrobić pakiet dostępny do Gradle?

+0

Dlaczego zarówno maven i gradle? Użyj jednego lub drugiego nie obu. –

+0

Ponieważ jest to usterka, plik źródłowy Java, sprytny IDE może być w stanie powiedzieć dokładnie, jak to naprawić: kliknij-kliknij-zrobione. Kod Visual Studio zrobił to dla mnie, aby rozwiązać ten błąd. – nobar

Odpowiedz

7

To chyba kwestia importu w kodzie źródłowym - Twój Gradle zbudować skrypt korzysta Wiosna Boot 1.3.6.RELEASE w którym SpringBootServletInitializer ma następującą nazwę pełną:

org.springframework.boot.context.web.SpringBootServletInitializer 

Twój Maven pom.xml jednak wykorzystuje Wiosna Boot 1.4.0.BUILD-SNAPSHOT, którego nazwa została zmieniona na pakiet:

org.springframework.boot.web.support.SpringBootServletInitializer 

więc jeśli przejdź do SampleJettyJspApplication i zmienić import do

import org.springframework.boot.context.web.SpringBootServletInitializer; 

wszystko powinno być w porządku.

Alternatywnie, można zmienić swój Gradle zbudować skrypt do importu 1.4.0.BUILD-SNAPSHOT, ale to wymagałoby dodania Wiosny kopiach repozytorium

buildscript { 
    repositories { 
     maven.url "http://repo.spring.io/snapshot" 
     mavenCentral() 
    } 

    dependencies { 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.0.BUILD-SNAPSHOT") 
    } 
} 
+1

Dzięki kolego. Gdzie Spring wspomniał w dokumencie? – Adnan

+1

"Wszystkie klasy w pakiecie org.springframework.boot.context.web zostały wycofane i przeniesione." https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.4-Release-Notes#deprecations-in-spring-boot-14 –

3

należy użyć tego samego źródła wersji 1.4.0 startową .BUILD-SNAPSHOT jak w maven. org.springframework.boot.web.support.SpringBootServletInitializer został wprowadzony od wersji 1.4.0, dlatego gradle nie może go znaleźć.

+1

Nie udało się dodać zależności "classpath" org. springframework.boot: spring-boot-gradle-plugin: 1.4.0.BUILD-SNAPSHOT "' gradle could not reconfigure –

+0

A to dlatego, że 1.4.0.BUILD-SNAPSHOT znajduje się tylko w repozytorium migawek Spring, a nie w centralnym Maven, weź spójrz na moją odpowiedź na próbkę kodu. –

+1

Dodaj repozytorium wiosennym, aby oceniać je według @ Miloš. Dokumentacja wtyczki Spring Boot Gradle http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/html/build-tool-plugins-gradle-plugin.html –