2016-03-01 60 views
4

我想部署一个简单的Spring Boot web应用程序到Pivotal Cloud Foundry,但是当我执行一个cf push时,我在日志中看到下面的错误Spring Boot - java.lang.ClassNotFoundException:org.springframework.context.ApplicationContextInitializer

java.lang.ClassNotFoundException: org.springframework.context.ApplicationContextInitializer 

这里是我的pom.xml

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.4.0.BUILD-SNAPSHOT</version> 
    <relativePath /> <!-- lookup parent from repository --> 
</parent> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <java.version>1.7</java.version> 
</properties> 

<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> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc-portlet</artifactId> 
    </dependency> 
</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 

<repositories> 
    <repository> 
     <id>spring-snapshots</id> 
     <name>Spring Snapshots</name> 
     <url>https://repo.spring.io/snapshot</url> 
     <snapshots> 
      <enabled>true</enabled> 
     </snapshots> 
    </repository> 
    <repository> 
     <id>spring-milestones</id> 
     <name>Spring Milestones</name> 
     <url>https://repo.spring.io/milestone</url> 
     <snapshots> 
      <enabled>false</enabled> 
     </snapshots> 
    </repository> 
</repositories> 
<pluginRepositories> 
    <pluginRepository> 
     <id>spring-snapshots</id> 
     <name>Spring Snapshots</name> 
     <url>https://repo.spring.io/snapshot</url> 
     <snapshots> 
      <enabled>true</enabled> 
     </snapshots> 
    </pluginRepository> 
    <pluginRepository> 
     <id>spring-milestones</id> 
     <name>Spring Milestones</name> 
     <url>https://repo.spring.io/milestone</url> 
     <snapshots> 
      <enabled>false</enabled> 
     </snapshots> 
    </pluginRepository> 
</pluginRepositories> 

相同的应用程序被部署在我的本地主机和我没有任何问题,建立了战争。对此有何想法?

+0

看起来你可能想尝试在没有tomcat的情况下使用胖jar来进行部署。 Portlet依赖关系有点困惑。它是一个portlet吗? – code

+8

这是CloudFoundry的Java buildpack的当前局限性。由于Spring Boot可执行文件的布局变化,它还不支持Spring Boot 1.4:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.4.0-M1-关于release-notes#可执行-JAR布局。使用Spring Boot 1.3.3.RELEASE将暂时避免此问题。 –

回答

0

由于SSL握手异常,似乎在jar版本期间没有下载jar。出于某种原因,尽管遗失了罐子,但我的构建并未失败。通过在mvn干净安装过程中启用调试发现此问题

6

由于Andy Wilkinson指出,这是Spring Boot 1.4和java_buildpack之间不匹配的问题。它可以通过明确提及java_buildpack的URL来解决:

$ cf push -b https://github.com/cloudfoundry/java-buildpack.git … 
+0

你和[Andy Wilkinson](http://stackoverflow.com/users/1384297/andy-wilkinson)都很棒!愿你的牛奶永远不会过期 – AsafSavich

+1

@AsafSavich haha​​ha。这个解决方案虽然很有魅力 – neaGaze