2016-06-10 113 views
0

我正在嘗試設置一個簡單的spring + hibernate項目,但不斷收到以下堆棧跟蹤信息......我也在下面粘貼了我的pom配置。無法設置spring + hibernate maven項目?

. ____   _   __ _ _ 
/\\/___'_ __ _ _(_)_ __ __ _ \ \ \ \ 
(()\___ | '_ | '_| | '_ \/ _` | \ \ \ \ 
\\/ ___)| |_)| | | | | || (_| | )))) 
    ' |____| .__|_| |_|_| |_\__, |//// 
=========|_|==============|___/=/_/_/_/ 
:: Spring Boot ::  (v1.3.5.RELEASE) 

2016-06-10 23:01:12.744 INFO 19668 --- [   main] com.package.tests.Test    : Starting Test on JamesWMAC.local with PID 19668 (/Users/james/apps/xx/target/classes started by james in /Users/james/apps/xx) 
2016-06-10 23:01:12.747 INFO 19668 --- [   main] com.package.tests.Test    : No active profile set, falling back to default profiles: default 
2016-06-10 23:01:12.762 INFO 19668 --- [   main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot[email protected]70a9f84e: startup date [Fri Jun 10 23:01:12 EST 2016]; root of context hierarchy 
2016-06-10 23:01:12.771 ERROR 19668 --- [   main] o.s.boot.SpringApplication    : Application startup failed 


java.lang.NoClassDefFoundError: org/springframework/beans/factory/config/EmbeddedValueResolver 
    at org.springframework.context.support.ApplicationContextAwareProcessor.<init>(ApplicationContextAwareProcessor.java:72) ~[spring-context-4.3.0.RELEASE.jar:4.3.0.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.prepareBeanFactory(AbstractApplicationContext.java:632) ~[spring-context-4.3.0.RELEASE.jar:4.3.0.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:516) ~[spring-context-4.3.0.RELEASE.jar:4.3.0.RELEASE] 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) ~[spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE] 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766) [spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE] 
    at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361) [spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) [spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1191) [spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1180) [spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE] 
    at com.package.tests.Test.main(Test.java:33) [classes/:na] 
Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.config.EmbeddedValueResolver 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372) ~[na:1.8.0_05] 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) ~[na:1.8.0_05] 
    at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_05] 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360) ~[na:1.8.0_05] 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_05] 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) ~[na:1.8.0_05] 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_05] 
    ... 10 common frames omitted 

這裏是我的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.package.api</groupId> 
    <artifactId>package</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <properties> 
     <org.springframework-version>4.3.0.RELEASE</org.springframework-version> 
    </properties> 

     <parent> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-parent</artifactId> 
      <version>1.3.5.RELEASE</version> 
      <relativePath/> <!-- lookup parent from repository --> 
     </parent> 
    <dependencies> 
     <!-- http://mvnrepository.com/artifact/org.hibernate/hibernate-core --> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>5.2.0.Final</version> 
     </dependency> 
     <!-- http://mvnrepository.com/artifact/mysql/mysql-connector-java --> 
     <!-- <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> 
      <version>6.0.2</version> </dependency> --> 

     <!-- http://mvnrepository.com/artifact/mysql/mysql-connector-java --> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.39</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>${org.springframework-version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>${org.springframework-version}</version> 
     </dependency> 



     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-orm</artifactId> 
      <version>${org.springframework-version}</version> 
      <type>jar</type> 
      <scope>compile</scope> 
     </dependency> 
     <!-- JAVA servlet dependcies --> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.1.0</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet.jsp</groupId> 
      <artifactId>javax.servlet.jsp-api</artifactId> 
      <version>2.3.1</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-dbcp2</artifactId> 
      <version>2.0</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter</artifactId> 
     </dependency> 

       <dependency> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-starter-web</artifactId> 
       </dependency> 
    </dependencies> 

     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-maven-plugin</artifactId> 
       </plugin> 
       <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <configuration> 
     <archive> 
      <manifest> 
      <mainClass>com.package.tests.Test</mainClass> 
      </manifest> 
     </archive> 
     <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
     </configuration> 
    </plugin> 
      </plugins> 
     </build> 
</project> 

而且我的servlet-context.xml中,我不知道這是任何雖然錯誤的貢獻:

<?xml version="1.0" encoding="UTF-8"?> 
<mvc:annotation-driven /> 
<mvc:resources mapping="/resources/**" location="/resources/" /> 
<context:component-scan base-package="com.package.spring" /> 

<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> 
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
    <property name="url" value="jdbc:mysql://localhost:3306/db"/> 
    <property name="username" value="root"/> 
    <property name="password" value="root"/> 
</bean> 
<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="configLocation" value="classpath:hibernate.cfg.xml" /> 
</bean> 
<tx:annotation-driven /> 
<bean id="transactionManager" 
    class="org.springframework.orm.hibernate5.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

Injects DAO into spring controller 
<bean id="userDAO" class="com.package.dao.userDAO"> 
    <constructor-arg> 
     <ref bean="sessionFactory" /> 
    </constructor-arg> 
</bean> 

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix" value="/webapp/views/" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 

我花了很長SOOOO試圖讓這個工作....

+1

使用框架...你想使用彈簧引導但很難不使用彈簧引導。而不是單獨的依賴使用'spring-boot-starter- *'。而不是xml使用java配置(基本上,你可以刪除你所擁有的一切,因爲Spring Boot自動配置。 –

回答

3

首先你的pom有點混亂。使用spring-boot-starter項目而不是單個罐子。

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-jpa</artifactId> 
    </dependency> 

    <!-- http://mvnrepository.com/artifact/mysql/mysql-connector-java --> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
    </dependency> 

</dependencies> 

應該是你所需要的。我想要特定版本的hibernate使用hibernate.version屬性。

<properties> 
    <hibernate.version>5.2.0.Final</hibernate.version> 
</properties> 

注:春季(啓動)尚未與Hibernate 5.2的工作!

接下來刪除您的Spring xml配置文件。

將您的數據庫的憑據放在application.properties中,而不是簡單的hibernate使用JPA。

也在你的pom中刪除程序集插件,因爲Spring Boot Plugin已經考慮到了這一點,程序集插件生成了一個錯誤的jar文件。

+0

是的,我相對較新的Java和它的包裝工作......來自節點js + python背景,我認爲它可能很簡單,你知道任何優秀的教程或入門套件,它們會讓我用休眠ORM + spring嗎?我只是試圖建立一個休息API! – James111

+0

https://spring.io/guides/gs/ access-data-jpa/ –

+0

明天我會經歷它,你會推薦我使用gradle還是maven?據我所知,gradle更新,但maven似乎支持更多的東西? – James111