我一直在尝试设置最简单的简单hibernate应用程序,并且除了我平庸的思维方式之外,我无法让它运行。 Maven很简单 - 在构建路径中添加依赖项,更新项目, blah blah blah yadda yadda yadda
它以单个ClassNotFoundException
开始,需要缺少依赖关系。我会导入丢失的jar并再次运行应用程序,只是为了获取另一个 ClassNotFoundException
。接下来我知道我有一大堆JARS而且没有工作申请
*目录已被屏蔽以保护不幸的
我在Eclipse Kepler的最后一个项目中使用了Maven和Hibernate,它几乎太容易了,哈!更新到Luna是一个真正的痛苦,试图让Maven正确运行 - 禁用Java Compilier Compliance Level只是为了能够更新Dynamic Web Module,更不用说手动创建缺少的src / main / java和src / test / java标准为maven-archetype-webapp
的文件夹,列表继续。我花了太多时间才让事情不失败。
在我的上一个项目中,我需要导入的是:
<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-core</artifactId>
<version>4.3.6.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>4.3.6.Final</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
那就是它!我在Session Factories和更新数据库表中游泳,就像我的工作一样(它是)。
这让我相信这个新项目缺少一些核心功能。也许我忽略了IDE升级中的一些东西。几乎可以保证我的构建路径。请帮助!
关于我的项目 - 我正在使用: Eclipse Luna(Kepler使用Maven设置容易100倍) Maven Webapp Archetype JDK-1.7 Hibernate Core 4-3.6
我的最新例外是
Exception in thread "main" java.lang.NoClassDefFoundError: javax/persistence/NamedStoredProcedureQuery
at org.hibernate.cfg.AnnotationBinder.bindDefaults(AnnotationBinder.java:276)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1402)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844)
at com.boa.ecris.test.Main.main(Main.java:22)
Caused by: java.lang.ClassNotFoundException: javax.persistence.NamedStoredProcedureQuery
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 4 more
如果这是javax persistence-api.jar
特有的,它已经在那里!!!
答案 0 :(得分:2)
Java API随时间而变化。您需要找到依赖项的正确版本(即包含您想要/需要使用的API版本的那个)。既然你告诉Maven使用persistance-api
的版本1.0.2,这就是Maven会做的 - 你可能会更清楚。
如果错误没有消失,那么您的下一步应该是Maven中央回购,特别是&#34;找我的等级#34;搜索对话框:http://search.maven.org/#search%7Cga%7C1%7Cfc%3Ajavax.persistence.NamedStoredProcedureQuery
接下来,您需要了解项目中需要哪些依赖项,并从列表中选择正确的依赖项。由于Maven不了解你的约束,所以你必须自己弄明白。
智慧的一句话:计算机没有大脑,自带。
答案 1 :(得分:0)
如果您有 ClassNotFoundException ,首先您必须查看您的存储库网站。您可以从.m2文件夹中的设置文件中获取 maven存储库URL 。然后,您可以使用工件ID 和版本在该网站上搜索您的相关性。如果您的版本不存在,您可以看到其他版本并将其改为您的版本。因此,您可以在项目中提供稳定性,而无需手动添加。
答案 2 :(得分:0)
Luna也可以创建maven项目层次结构。在New maven项目对话框中,选中创建一个简单项目(跳过原型选择)复选框。