我尝试从属性文件中简单使用简单的Apache Commons Configuration2加载配置。这是我的依赖:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-configuration2</artifactId>
<version>2.1</version>
</dependency>
我尝试启动我的Web应用程序并获取此信息:
java.lang.ClassNotFoundException: org.apache.commons.beanutils.DynaBean
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1285)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at com.sun.proxy.$Proxy21.<clinit>(Unknown Source)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at java.lang.reflect.Proxy.newProxyInstance(Proxy.java:739)
at org.apache.commons.configuration2.builder.fluent.Parameters.createParametersProxy(Parameters.java:294)
at org.apache.commons.configuration2.builder.fluent.Parameters.properties(Parameters.java:245)
可爱。从什么时候开始我们不能使用Maven自动获取依赖关系?我查看commons-configuration2 POM on Maven Central并看到commons-beanutil被声明为可选。
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.2</version>
<optional>true</optional>
</dependency>
为什么声明为&#34;可选&#34;什么时候显然我需要它?
答案 0 :(得分:1)
此依赖项被标记为可选,因为它仅对库的某些非中心功能是必需的,这意味着您仍然可以使用大多数库而不必安装此依赖项。
根据文档:Runtime dependencies for Commons Configuration 2.0
Commons Configuration 2.0需要Java 6或更高版本。
在Maven POM中声明了很多依赖项。这些都是在编译期间所需要的。但是,在运行时,您只需要将依赖项添加到您正在使用的Commons Configuration软件包部分所需的类路径中。下表可帮助您根据要使用的组件确定必须包含的依赖项:
考虑到表格不容易包含在SO答案中,我只列出commons-configuration-2中要求包含beanutils的功能:
在您的情况下,根据您提供的堆栈跟踪,您正在使用配置构建器,因此需要在您的pom中手动包含beanutils依赖项。