Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么Maven不能解析commons配置的所有依赖项? 总结_Java_Maven_Apache Commons Config - Fatal编程技术网

Java 为什么Maven不能解析commons配置的所有依赖项? 总结

Java 为什么Maven不能解析commons配置的所有依赖项? 总结,java,maven,apache-commons-config,Java,Maven,Apache Commons Config,尝试XMLConfiguration=newxmlconfiguration(“config/config.xml”)时仅使用commons配置1.10我需要在maven设置中添加更多依赖项(即commons集合不高于3.2.1)。为什么会这样?为什么maven不能简单地解决所有需要的依赖关系 细节 我正在努力工作。首先,我想使用最新版本2.0-alpha2,但由于无法配置Maven下载正确的资源,该版本根本无法正常工作,但这是另一回事 当我发现1.10版实际上是“一点十”(而不是“一点一零”)

尝试
XMLConfiguration=newxmlconfiguration(“config/config.xml”)时仅使用
commons配置1.10
我需要在maven设置中添加更多依赖项(即
commons集合
不高于
3.2.1
)。为什么会这样?为什么maven不能简单地解决所有需要的依赖关系

细节 我正在努力工作。首先,我想使用最新版本2.0-alpha2,但由于无法配置Maven下载正确的资源,该版本根本无法正常工作,但这是另一回事

当我发现1.10版实际上是“一点十”(而不是“一点一零”)并且因此是commons配置1的最新版本(教程中也有介绍)之后,我决定尝试一下

对于我的maven依赖项(集成在eclipse中),我使用了:

但是,当我尝试实现一个类似于中引用的示例及其后续问题时,我得到了与其中引用的完全相同的错误-但是导入
org.apache.commons.beanutils.PropertyUtils
的解决方案不起作用,因为我缺少beanutils。因此,基本上通过降级,我只是从错过收集的错误切换到错过小海狸

当你做什么的时候,你可以看到哪些依赖项被使用。当我得知1.10版现在使用了比1.9版在构造函数调用中更多的依赖项(即
CollectionUtils
)时,我有点惊讶。因为在1.10和1.9中都存在依赖性问题,所以我坚持使用较新的版本

我发现
CollectionUtils
位于以下工件中(正如我在那里看到的那样):

在使用了这些依赖项之后,我让一切都正常工作(或多或少,但我现在遇到的异常不再取决于缺少的类定义):

<dependencies>
    <dependency>
        <groupId>commons-configuration</groupId>
        <artifactId>commons-configuration</artifactId>
        <version>1.10</version>
    </dependency>
    <dependency>
        <groupId>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
        <version>3.2.1</version>
    </dependency>
    <dependency>
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils</artifactId>
        <version>1.9.2</version>
    </dependency>
</dependencies>

共用配置
共用配置
1.10
公地收藏
公地收藏
3.2.1
公地小海狸
公地小海狸
1.9.2
为什么我必须自己添加依赖项?我认为使用maven的全部目的是避免做这些事情,就javadocs和源文件而言,它做得相当好


到目前为止,我确信依赖项不包括在设计层次结构中(是这样吗?),这可能是为了避免开销。但是,有没有一种方法可以一次获得所有依赖项,或者更好地获得我需要的所有依赖项?为什么它是这样设计的?

如果我们分析commons配置的POM,我们会发现,
commons集合
依赖项是可选的:

  <dependencies>
    <dependency>
      <groupId>commons-collections</groupId>
      <artifactId>commons-collections</artifactId>
      <version>3.2.1</version>
      <optional>true</optional>
    </dependency>
    ...

公地收藏
公地收藏
3.2.1
真的
...
此外,从Maven文档中:

如果用户希望使用与可选功能相关的功能 依赖项,则必须在中重新声明该可选依赖项 他们自己的项目


Maven试图解决pom中使用的库的所有必要依赖关系。有时候你有一些依赖项,这些依赖项只对某些特定功能是必需的,如果依赖项的用户不使用它,你就不想强迫他下载它。然后您将依赖项声明为。这发生在
commons配置中的
commons集合
中。参见
commons配置
-pom

此问题在commons配置网站的页面上进行了解释

引用该页的话:

Maven POM中声明了许多依赖项。这些都是编译时需要的但是,在运行时,您只需要向类路径中添加您正在使用的Commons配置包部分所需的依赖项。下表帮助您根据要使用的组件确定必须包含哪些依赖项

其他答案从Maven的角度解释了为什么这是可行的。这个答案是为了给公众提供某种形式的辩护。他们至少警告过你


在依赖于其他Apache Commons组件的情况下,他们会花时间使用各种版本进行测试,并在该页面底部发布有关兼容性的信息。

可以找到有关该主题的进一步阅读。该页面表明可选依赖项是不将项目拆分为仅包含非可选依赖项的子模块的变通方法。我想在这种情况下,如果您的用例不需要,配置人员不想强制增加大量的依赖项。虽然您没有直接提供源代码,但这个答案更简洁,更切题(我在我的问题上严重缺乏这一特点),因为它包含了我理解“问题”所需的所有信息(如果需要,我可以快速搜索文档以获取更多信息)。谢谢,我在那里找到了这些版本,因为它们帮助我运行了项目。我想我错过了那一段中编译时和运行时之间的区别,但对于其他两个答案,这一切现在都是有意义的。很高兴您提供了文档和pom的链接。请注意,这将是一个改进(更符合stackoverflow的精神)如果你也像Evgeniy Dorofev那样在回答中包含文档和pom的特定部分(他没有你提供的来源的链接)。你的两个回答协同得很好。
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<configuration>
  <property>value</property>
  <nestedproperty>
    <arrayvalue>0,1,2,3,4</arrayvalue>
    <property>anothervalue</property>
  </nestedproperty>
</configuration>
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/collections/CollectionUtils
    at org.apache.commons.configuration.XMLConfiguration.constructHierarchy(XMLConfiguration.java:640)
    at org.apache.commons.configuration.XMLConfiguration.initProperties(XMLConfiguration.java:596)
    at org.apache.commons.configuration.XMLConfiguration.load(XMLConfiguration.java:1009)
    at org.apache.commons.configuration.XMLConfiguration.load(XMLConfiguration.java:972)
    at org.apache.commons.configuration.XMLConfiguration$XMLFileConfigurationDelegate.load(XMLConfiguration.java:1647)
    at org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:324)
    at org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:261)
    at org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:238)
    at org.apache.commons.configuration.AbstractHierarchicalFileConfiguration.load(AbstractHierarchicalFileConfiguration.java:184)
    at org.apache.commons.configuration.AbstractHierarchicalFileConfiguration.<init>(AbstractHierarchicalFileConfiguration.java:95)
    at org.apache.commons.configuration.XMLConfiguration.<init>(XMLConfiguration.java:261)
    at main.ConfigurationTest.main(ConfigurationTest.java:12)
<dependency>
    <groupId>commons-configuration</groupId>
    <artifactId>commons-configuration</artifactId>
    <version>1.9</version>
</dependency>
property
nestedproperty.arrayvalue
nestedproperty.property
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.0</version>
</dependency>
<dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
    <version>3.2.1</version>
</dependency>
<dependencies>
    <dependency>
        <groupId>commons-configuration</groupId>
        <artifactId>commons-configuration</artifactId>
        <version>1.10</version>
    </dependency>
    <dependency>
        <groupId>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
        <version>3.2.1</version>
    </dependency>
    <dependency>
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils</artifactId>
        <version>1.9.2</version>
    </dependency>
</dependencies>
  <dependencies>
    <dependency>
      <groupId>commons-collections</groupId>
      <artifactId>commons-collections</artifactId>
      <version>3.2.1</version>
      <optional>true</optional>
    </dependency>
    ...