2011-05-24 76 views
7

昨晚我试图用一个简单的教程来构建一个使用堆栈的应用程序 - Spring(2.5)+ JPA(1.0)+ Hibernate(第一次下载,所以不知道要使用哪个版本)。不幸的是,我不想使用Maven作为目标参与者在ANT构建。像往常一样击中搜索引擎,并以某种方式获得appcontext,persistence.xml和java类中的步骤。当我开始需要图书馆的那一刻,我迷失在JAR地狱中。幸运的是,Spring方面没有太多问题,因为所有依赖的JAR都打包在一起用于我的Spring 2.5.6。我们是否在java平台上类似于dll地狱的jar地狱?

当它来到冬眠,我根本不知道其被列入首位的所有JAR文件。在下一个挑战中,不知道每个版本要添加哪个版本。

最后我得到了整个事情的工作,但它看起来太吓人了,除非我通过Maven的天堂采取再次输入该JAR地狱。

随着大量拦截机和织布的,它正在成为谁曾经喜欢Java的主要为大量的在我的代码是做透明常规的Java程序员更复杂。

我在思考过程中是否正确?

+2

不是所有的JPA实现都有像Hibernate一样的依赖关系。 – DataNucleus 2011-05-24 15:20:05

+3

我们不会朝它迈进。我们从一九九一年起就在这里。看看应该解决这个问题的“技术”的数量。以OSGi和他们的页面为例*“为什么OSGi”*,你会看到例如下面的代码:*“OSGi技术解决了JAR地狱”*。 OSGi家伙在涉及到依赖性问题时并不完全无能为力:) – SyntaxT3rr0r 2011-05-24 15:42:56

回答

9

你仍然可以有依赖关系管理,同时使用Ant,使用Ivy。 请参阅详细教程here以获得您想要使用的堆栈。 (不包括休眠,但我猜你可以找到如何快速添加)

还有一件事,如果你指的是具有完整Spring 2.5.6包的spring.jar,我强烈建议不要使用它,你可能不需要超过20%的库中包含它。 (花时间去发现究竟哪些库,你确实需要,只挑选那些。)

另外,还要考虑,如果你能使用Spring 3,以及Hibernate的,如果你可以自由选择一个版本,我会去为最新。

+0

谢谢。我使用了Maven和OSGi。他们很棒。但为了我的需要,参与者不能进入Maven存储库并且没有很好的互联网连接,我必须进入一个断开连接或静态的库,这些库建立在构建系统时所有罐子都存在的地方。因此我一个接一个寻找每个罐子。 – arunram 2011-05-25 16:39:19

+1

甚至更​​多我的第二个评论仍然有效,请不要使用spring.jar,请检查您需要的是哪个罐子。但是由于你的局限性,你可能会认为使用任何一种集中式依赖关系管理系统是一种开销,只不过是指出这样一个事实,即它是一个类似于maven的系统,也就是常春藤。 – abalogh 2011-05-25 16:44:08

1

我以前使用其他JPA实现,但我用Hibernate进行了今年第一次。当然,在瓶子依赖方面它比其他更复杂,但在Getting Started GuideChapter 1Obtaining Hibernate下,我找到了我需要的罐子和原因的详细信息。

后来我确实遭受了瓶子地狱问题,并不是因为不知道使用哪个罐子,而是因为我们处于一个非常大的问题中,而其他子项目已经在使用旧版本的Hibernate类,并且这使我在运行时遇到了很多麻烦,并花了我几天的时间来诊断和修复。

我认为这是暂时成为现实,而像Maven的或类似的OSGi试图缓解这个问题的框架工具。

也许我们最大的希望是Project Jigsaw打算成为未来的JDK 8的一部分,并尝试解决我们目前拥有的Java模块化问题。它将像OSGi一样具有类固醇,并且构建在JDK本身中。

但出现这种情况之前,我能告诉你的是名言被Wiston丘吉尔

如果你正在经历炼狱,保持 去

+0

+1仅供参考 – abalogh 2011-05-24 17:46:01

0

这是一Grails解决的问题 - 通过捆绑一组特定的jar(Spring,Hibernate等),并且随着Grails的发展升级这些jar。