方式太多Maven依赖

时间:2014-09-11 02:14:16

标签: java maven

我一直在尝试设置最简单的简单hibernate应用程序,并且除了我平庸的思维方式之外,我无法让它运行。 Maven很简单 - 在构建路径中添加依赖项,更新项目, blah blah blah yadda yadda yadda

它以单个ClassNotFoundException开始,需要缺少依赖关系。我会导入丢失的jar并再次运行应用程序,只是为了获取另一个 ClassNotFoundException。接下来我知道我有一大堆JARS而且没有工作申请

enter image description here

*目录已被屏蔽以保护不幸的

我在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特有的,它已经在那里!!!

3 个答案:

答案 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项目对话框中,选中创建一个简单项目(跳过原型选择)复选框。