Maven 未找到Spring数据web支持CRUD存储库
我有一个使用JPA的工作项目。但后来我发现了Spring数据的威力。所以我开始研究它,使用spring,我成功地配置了一个控制台应用程序,但对于一个web项目来说,这并不明显。 我得到这个错误:Maven 未找到Spring数据web支持CRUD存储库,maven,spring-mvc,jpa,spring-data-jpa,tomcat8,Maven,Spring Mvc,Jpa,Spring Data Jpa,Tomcat8,我有一个使用JPA的工作项目。但后来我发现了Spring数据的威力。所以我开始研究它,使用spring,我成功地配置了一个控制台应用程序,但对于一个web项目来说,这并不明显。 我得到这个错误: 03-Jan-2015 23:52:11.550 SEVERE [localhost-startStop-1] org.springframework.web. context.ContextLoader.initWebApplicationContext Context initialization
03-Jan-2015 23:52:11.550 SEVERE [localhost-startStop-1] org.springframework.web.
context.ContextLoader.initWebApplicationContext Context initialization failed
java.lang.NoClassDefFoundError: org/springframework/data/repository/CrudReposit
ory
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14
2)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(Webapp
ClassLoader.java:2477)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoa
der.java:880)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoa
der.java:1290)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoa
der.java:1173)
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2663)
at java.lang.Class.getDeclaredConstructors(Class.java:2012)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanP
ostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor
.java:267)
at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanF
actory.java:1059)
at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1032)
at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.doCreateBean(AbstractAutowireCapableBeanFactory.java:505)
at org.springframework.beans.factory.support.AbstractAutowireCapableBean
Factory.createBean(AbstractAutowireCapableBeanFactory.java:476)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getOb
ject(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistr
y.getSingleton(DefaultSingletonBeanRegistry.java:229)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBe
an(AbstractBeanFactory.java:298)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean
(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.
preInstantiateSingletons(DefaultListableBeanFactory.java:762)
at org.springframework.context.support.AbstractApplicationContext.finish
BeanFactoryInitialization(AbstractApplicationContext.java:757)
at org.springframework.context.support.AbstractApplicationContext.refres
h(AbstractApplicationContext.java:480)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebA
pplicationContext(ContextLoader.java:403)
at org.springframework.web.context.ContextLoader.initWebApplicationConte
xt(ContextLoader.java:306)
at org.springframework.web.context.ContextLoaderListener.contextInitiali
zed(ContextLoaderListener.java:106)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContex
t.java:4749)
at org.apache.catalina.core.StandardContext.startInternal(StandardContex
t.java:5175)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase
.java:724)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:70
0)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:714)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.jav
a:1071)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig
.java:1722)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:51
1)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.
java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.springframework.data.repository
.CrudRepository
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoa
der.java:1320)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoa
der.java:1173)
... 38 more
03-Jan-2015 23:52:11.563 SEVERE [localhost-startStop-1] org.apache.catalina.core
.StandardContext.startInternal Error listenerStart
03-Jan-2015 23:52:11.565 SEVERE [localhost-startStop-1] org.apache.catalina.core
.StandardContext.startInternal Erreur de dΘmarrage du contexte [/tp12] suite aux
erreurs prΘcΘdentes
03-Jan-2015 23:52:11.568 INFO [localhost-startStop-1] org.springframework.web.co
ntext.support.AnnotationConfigWebApplicationContext.doClose Closing Root WebAppl
icationContext: startup date [Sat Jan 03 23:52:09 CET 2015]; root of context hie
rarchy
03-Jan-2015 23:52:11.580 WARNING [localhost-startStop-1] org.springframework.web
.context.support.AnnotationConfigWebApplicationContext.doClose Exception thrown
from LifecycleProcessor on context close
java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'ref
resh' before invoking lifecycle methods via the context: Root WebApplicationCont
ext: startup date [Sat Jan 03 23:52:09 CET 2015]; root of context hierarchy
at org.springframework.context.support.AbstractApplicationContext.getLif
ecycleProcessor(AbstractApplicationContext.java:357)
at org.springframework.context.support.AbstractApplicationContext.doClos
e(AbstractApplicationContext.java:877)
at org.springframework.context.support.AbstractApplicationContext.close(
AbstractApplicationContext.java:836)
at org.springframework.web.context.ContextLoader.closeWebApplicationCont
ext(ContextLoader.java:579)
at org.springframework.web.context.ContextLoaderListener.contextDestroye
d(ContextLoaderListener.java:115)
at org.apache.catalina.core.StandardContext.listenerStop(StandardContext
.java:4792)
at org.apache.catalina.core.StandardContext.stopInternal(StandardContext
.java:5392)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:160)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase
.java:724)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:70
0)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:714)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.jav
a:1071)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig
.java:1722)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:51
1)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.
java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
.java:617)
at java.lang.Thread.run(Thread.java:745)
我的结构和他们推荐的一样
AppConfig.java
AuthorControl.java
persistence.xml
org.hibernate.jpa.HibernatePersistenceProvider
pom.xml
4.0.0
fr.eservices.xxNAMExx
普罗捷
1.0-快照
罐子
Projet
org.springframework.boot
spring启动程序父级
1.1.10.发布
WEB-INF
WEB-INF/课程
箱子
WEB-INF/src
WEB-INF/测试
org.apache.maven.plugins
maven编译器插件
3.2
1.8
1.8
WEB-INF/资源
javax.servlet
javax.servlet-api
3.1.0
假如
org.hibernate
休眠实体管理器
4.3.7.最终版本
运行时
com.h2数据库
氢
1.4.182
假如
fr.E服务
代码检查器
1.2
测试
朱尼特
朱尼特
4.11
测试
org.springframework
SpringWebMVC
4.1.2.1发布
编译
jstl
jstl
1.2
编译
org.springframework.data
spring数据jpa
编译
您的源和资源文件夹看起来很好,因为您已经在项目描述符的
部分下定义了latters
似乎可以避免的主要问题是您在AuthorControl
类中定义的两级依赖项注入,在该类中,您使用以下两种方法注入AuthorRepository
:
- 现场注入:
- 和构造函数注入: @自动连线 公共AuthorControl(AuthorRepository用户存储库){ //... }
据我所知,你应该保留这两份声明中的任何一份。因此,删除字段上的
@Autowired
注释可以解决问题。您将persistence.xml文件放在哪里了?在哪个路径下?projet-jee/WEB-INF/resources/META-INF/persistence.xml如果我为存储库类注释@Autowired,则生成表。您解决了问题吗?第一个@Autowired AuthorRepository userRepository代码>被注释了,我们留下它只是为了表明我测试了这两个选项。
@Configuration
@EnableWebMvc
@EnableSpringDataWebSupport
@ComponentScan({"impl","jpa","designelements"})
public class AppConfig extends WebMvcConfigurationSupport{
@Bean
public InternalResourceViewResolver getJspViewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("views/");
resolver.setSuffix(".jsp");
resolver.setOrder(0);
return resolver;
}
@Bean
public EntityManager getEntityManager() {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("myapp");
return emf.createEntityManager();
}
@Bean
public EntityManagerFactory getEntityManagerFactory() {
return Persistence.createEntityManagerFactory("myapp");
}
}
@Controller
@ComponentScan({ "impl", "jpa", "designelements" })
public class AuthorControl {
// @Autowired
// AuthorRepository userRepository;
private final AuthorRepository userRepository;
@Autowired
public AuthorControl(AuthorRepository userRepository) {
//Assert.notNull(this.userRepository, "Repository must not be null!");
this.userRepository = userRepository;
}
@RequestMapping(value = "/authors.html", method = RequestMethod.GET)
public String listAuthors(Model model) {
// dao.create("abc", "def");
// List<Author> authors = dao.listAll();
// model.addAttribute("authors", authors);
// // fetch customers by last name
List<Author> authors = this.userRepository.findByLastName("def");
model.addAttribute("authors", authors);
return "authors";
}
@Entity
@Table(name="authors")
public class Author {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
public long id;
@Column(name="firstname")
public String firstname;
@Column(name="lastname")
public String lastname;
@Override
public String toString() {
return firstname + " " + lastname;
}
public static Author create(String firstName, String lastName) {
Author author = new Author();
author.firstname = firstName;
author.lastname = lastName;
return author;
}
}
<persistence
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="myapp">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<property name="hibernate.connection.driver_class" value="org.h2.Driver"/>
<property name="hibernate.connection.url" value="jdbc:h2:./db"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
<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>fr.eservices.xxNAMExx</groupId>
<artifactId>projet-jee</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Projet</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.1.10.RELEASE</version>
</parent>
<build>
<directory>WEB-INF</directory>
<outputDirectory>WEB-INF/classes</outputDirectory>
<testOutputDirectory>bin</testOutputDirectory>
<sourceDirectory>WEB-INF/src</sourceDirectory>
<testSourceDirectory>WEB-INF/test</testSourceDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>WEB-INF/resources</directory>
</resource>
</resources>
</build>
<dependencies>
<!-- Running dependencies -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.7.Final</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.182</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>fr.eservices</groupId>
<artifactId>code-checker</artifactId>
<version>1.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.2.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>compile</scope>
</dependency>
<!-- Spring Data -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
@Autowired
AuthorRepository userRepository;