我对Java& maven,所以为了了解我的方式,我决定做一个项目作为学习的手段.
我选了一个很常见的堆栈:
> Java 1.6
>休眠(带注释)
>春天(带注释)
> JUnit 4
> Tomcat
> Oracle XE / In-mem hsqldb
到目前为止,我遇到的最大问题之一是获得正确的jar版本组合以获得稳定的环境.这是两个月后我still fighting with的问题.
我经常抛出noSuchMethod或classNotFound异常,结果是Spring模块A x.x.x与Hibernate模块B y.y.y不兼容.或者,通常,弹簧模块A x.x.x与弹簧模块B y.y.y不兼容
我希望从一个干净的平板开始,版本依赖应该是最小的 – 只需抓住最新版本,一切都应该工作……但事实并非如此.
我预计使用maven会简化这个过程,毫无疑问它会有.
但它肯定远非无痛.我曾经想过,如果模块A需要模块B的特定版本,那么它将在某个地方强制执行,并且可以提供更有意义的消息,只有“noSuchMethod”.
此外,似乎我发现这些问题的唯一方法是尝试新的方法调用,获取可怕的noSuchMethod错误,并开始谷歌搜索.
我是否错过了这里的一些事情,这让我自己变得比以前更难?
作为参考,这是我的pom的依赖部分…如果你发现任何可怕的非标准,请告诉我!
org.slf4j
slf4j-api
1.5.6
org.slf4j
slf4j-log4j12
1.5.6
junit
junit
4.4
commons-lang
commons-lang
2.3
ojdbc
ojdbc
14
org.apache.commons
commons-io
1.3.2
commons-io
commons-io
1.4
javassist
javassist
3.8.0.GA
commons-dbcp
commons-dbcp
1.2.1
hsqldb
hsqldb
1.8.0.7
org.dbunit
dbunit
2.4.4
org.springframework
spring
2.5.6
org.springframework
spring-test
2.5.6
org.springframework
spring-orm
2.5.6
org.hibernate
hibernate-annotations
3.4.0.GA
org.hibernate
hibernate-commons-annotations
3.3.0.ga
org.hibernate
hibernate-core
3.3.1.GA
org.hibernate
hibernate-validator
3.1.0.GA
org.hibernate
hibernate-entitymanager
3.4.0.GA
commons-lang
commons-lang
2.3
谢谢
马蒂
解决方法:
我发现挑战的一件事是确定每个包装中的内容,特别是来自Spring.
为此,我发现Netbeans对maven的支持非常出色,因为它可以让你知道每个需求引入了哪些库. 6.7 Beta包含一个非常出色的图形树,m2eclipse也有一个非常好的图形依赖树.你怎么知道spring-orm包括spring-bean,spring-core,spring-context和spring-tx?您可以从命令行使用dependency plugin向maven询问依赖关系,但图形表示非常方便. dependency:tree是您想要运行的目标.显然你也可以从Netbeans或Eclipse运行它.
所以,作为你的一个碰撞的例子:
org.hibernate
hibernate-annotations
3.4.0.GA
实际上包括hibernate-commons-annotations-3.1.0.GA而不是3.3.它还包括hibernate-core-3.3.0.SP1,而不是3.3.1.GA.
我将从你的“最大”组件开始,然后开始查看已包含的部分,并仅添加缺少的部分.即便如此,请仔细检查您是否没有重复的依赖关系,如果需要,请排除副本,如this question的答案所示.
标签:java,maven-2,spring,hibernate,jar
来源: https://codeday.me/bug/20190705/1386435.html