Maven依赖关系中Scope的作用
在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署。目前<scope>可以使用5个值:
1、 compile,缺省值,适用于所有阶段,会随着项目一起发布。
2、 provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
3、 runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
4、 test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
5、 system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
异常描述
nestedexception is java.lang.NoSuchMethodError:org.apache.log4j.Logger.trace(Ljava/lang/Object;)
解决方案
Hibernate-core-version.jar的子包:jboss-logging-version.jar中包含了一个provider级别的pomdependency,如下:
其版本号是1.2.16,因为scope是provided,所以用户必须提供这个版本的依赖。这样我们在自己的pom.xml中定义log4j时,版本必须与上述的一致。