在 maven 工程中引用到了一个 jar 包 commons-io-2.4.jar,由于被引用的 jar 包依赖 hibernate-jpa-2.0-api ,而 hibernate-jpa-2.0-api 存在 bug ,会报出
Error: java.lang.NoSuchMethodError:javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/ForeignKey;
或
java.lang.NoSuchMethodError:javax.persistence.Table.indexes()[Ljavax/persistence/Index;
等类似的错误。由于主工程同样存在对 hibernate-jpa-2.0-api 的依赖,先将主工程的 pom.xml 修改,在 MyEclipse 中的 MavenDependencies 中发现仍然存在 hibernate-jpa-2.0-api-1.0.1.Final.jar 的引用,显而易见,这个存在 bug 的 hibernate-jpa 版本是由 commons-io-2.4.jar 依赖引入的,为排除该依赖,在主工程的 pom.xml 文件中对依赖做如下修改:
修改前:
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency>
修改后:
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> <!-- 添加排除tag --> <exclusions> <exclusion> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.0-api</artifactId> </exclusion> <!-- 和<dependency>tag相同,可以添加多个<exclusion>排除多个依赖 --> </exclusions> </dependency>
现在在 MyEclipse 中的 Maven Dependencies 中发现已经没有了对 hibernate-jpa-2.0-api.jar 的引用。
补充:
如何发现 commons-io-2.4.jar 依赖 hibernate-jpa-2.0-api.jar ,通过 MyEclipse 中 pom.xml 文件下的 Dependency Graph 视图,如下图所示:
通过 Dependency Graph 可以看出具体 jar 包依赖哪些其他 jar 包。
完。