Apache Commons Configuration2的依赖项声明为可选

时间:2016-11-26 19:12:42

标签: apache-commons-config

我尝试从属性文件中简单使用简单的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;什么时候显然我需要它?

1 个答案:

答案 0 :(得分:1)

此依赖项被标记为可选,因为它仅对库的某些非中心功能是必需的,这意味着您仍然可以使用大多数库而不必安装此依赖项。

根据文档:Runtime dependencies for Commons Configuration 2.0

  

Commons Configuration 2.0需要Java 6或更高版本。

     

在Maven POM中声明了很多依赖项。这些都是在编译期间所需要的。但是,在运行时,您只需要将依赖项添加到您正在使用的Commons Configuration软件包部分所需的类路径中。下表可帮助您根据要使用的组件确定必须包含的依赖项:

考虑到表格不容易包含在SO答案中,我只列出commons-configuration-2中要求包含beanutils的功能:

  • 配置构建器
  • ConfigurationDynaBean

在您的情况下,根据您提供的堆栈跟踪,您正在使用配置构建器,因此需要在您的pom中手动包含beanutils依赖项。