问题标签 [apache-commons-config]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
apache-commons-config - 如果找不到文件,如何进行空配置?
ConfigurationException
使用 Apache Commons Configurations 1.9,如果找不到提供的文件,如何避免加载配置文件?
Spring 应用上下文类似于:
但是我的配置文件是可选的,所以我想确保应用程序正确启动,即使文件不存在。
如何使用 Commons Configurations 实现这一目标?AFactoryBean
有效,但还有其他方法吗?
java - 为什么 Maven 不解决公共配置的所有依赖项?
概括
XMLConfiguration configuration = new XMLConfiguration("config/config.xml");
仅尝试时,commons-configuration 1.10
我需要在我的 Maven 设置中添加更多依赖项(即commons-collections
不比 更新)。3.2.1
为什么会这样,为什么 Maven 不简单地解决所有需要的依赖项?
细节
我正在尝试让commons-configuration工作。首先,我想使用最新版本 2.0-alpha2,因为我无法配置 Maven 以下载正确的资源,所以它根本无法正常工作——但那是另一回事了。
在我发现 1.10 版实际上是“一点十”(不是“一点一零”),因此是最新版本的 commons-configuration 1 (并在教程中介绍)之后,我决定试一试.
对于我的 Maven 依赖项(集成在 Eclipse 中),我使用了:
但是,在尝试此示例时:
使用以下 config.xml:
我得到了错误:
我首先希望他们(当然不是我)只是搞砸了一些 maven 依赖项,因为我不会再打扰使用哪个版本了(我没有让 2.0 工作,记得吗?)我决定降级到版本1.9 通过将 maven 依赖项替换为:
这很好地解决了问题,测试用例正在运行:
但是,当我尝试实现与非常简单的 Apache-commons 配置示例中引用的示例类似的示例时,抛出 NoClassDefFoundError及其后续问题时,我得到了在那里引用的完全相同的错误 - 但解决方案,导入org.apache.commons.beanutils.PropertyUtils
不起作用,因为我我想念beanutils。所以基本上通过降级,我只是从缺少集合的错误切换到缺少 beanutils。
有一个依赖项概述,您可以在其中查看执行操作时使用了哪些依赖项。得知 1.10 版现在CollectionUtils
在构造函数调用中使用了 1.9 版以外的其他依赖项(即 ),我有点惊讶。由于在 1.10 和 1.9 中都存在依赖问题,我只是坚持使用较新的版本。
我发现CollectionUtils
位于以下工件中(正如我在其maven 存储库中指出的那样):
可悲的是,一个(一开始对我来说并不明显)没有在 package 中定义类CollectionUtils
,collections
而是在 package 中collections4
。在依赖项概述中暗示了这个问题,但他们只提到了早期版本可能存在的问题......我似乎不再考虑它了,而是简单地将依赖项更改为:
使用这些依赖项后,我得到了一切工作(或多或少,但我现在得到的异常不再取决于缺少的类定义):
为什么我必须自己添加依赖项?我认为使用 maven 的重点是避免必须做这些事情,并且就 javadocs 和源文件而言,它做得很好。
到目前为止,我确信依赖项不包含在设计层次结构中(是这样吗?),可能是为了避免开销。但是,有没有办法一次简单地获取所有依赖项,或者更好地获取我需要的所有依赖项?为什么要这样设计?
java - Commons XMLConfiguration 和模式验证?
我使用 Apache Commons XMLConfiguration 进行配置。现在我需要一个基于模式的验证。但我无法将我的 xsd 添加到 XMLConfiguration。xsd 位于应用程序 jar 文件中。
如果我使用 Java SE 中的方法,验证运行不会出现问题:
但是,如果我将 XMLConfiguration 与 DefaultEntityResolver 一起使用,我就没有成功。
我得到以下异常:
“配置”是 config_default.xml 的根元素。我认为这意味着,它找不到 xsd。
我的第一个问题,我必须在 resolver.registerEntityId("configuration", urlXsd); 的第一个参数中输入什么?架构的公共 ID 是什么?该文档仅显示了一个带有 DTD public id 的示例。
这是简化的架构和 xml -> xml:
架构:
更新:我的测试基于 dbank 的回答:
现在我用无效的 xml 对其进行了测试,但我只看到输出错误。没有抛出异常。
更新 - xml 中 xsd 的路径: 我认为基于回调的处理不太好。根据您的第一个建议,我已经使用 xsd 的路径在 xml 中进行了测试。但这仅适用于任何路径。
第一次运行确实处理正确。它从基于 xsi:noNamespaceSchemaLocation="config_schema.xsd" 的 jar 中获取 xsd。然后将从 jar 加载的默认配置写入本地文件系统。我检查了书面文件,找不到奇怪的想法。然后我再次运行示例应用程序,但现在出现以下错误:
他找不到xsd,但是xml文件中的路径是正确的,和第一次运行一样。为什么他在第一次玩的时候能找到 xsd,而在第二次运行时却找不到?
第二个问题,是 XMLConfiguration 的所有可能的日志输出吗?
更新 3:我再次测试并查看,如果我将 xsd 放入本地文件系统,那么第二次运行没有问题。我认为问题是在 xml 中定义路径时对 xsd 的相对搜索。
是否可以从本地文件系统加载 xml 并使用 jar 文件中的模式进行验证?我在调用 load() 或 refresh() 时搜索没有回调和直接异常处理的解决方案。
此致,
java - 使用 Apache Commons Configuration 和 BeanUtils 从 XML 读取数组到 bean
在配置文件中,我有多个数组值,例如电话簿的名称。
我想通过 BeanHelper (或其他方式)将这些读入这个 bean:
或者理想情况下使用列表java.util.List<String>
而不是数组String[]
。接口的实现很简单:
主要看起来像这样:
这在尝试创建 bean 时不起作用,我得到一个ConfigurationRuntimeException
由此引起的UnsupportedOperationException
:
我必须更改的第一件事是 XML 文件的布局,以匹配XMLBeanDeclaration和XMLConfiguration的文档:
如果我运行该程序,它会正常终止,我的输出是:
这意味着XMLConfiguration
正确标识了属性名称中具有数组的配置文件,但不知何故 XMLBeanDeclaration 没有。它总是只取最后一个值。
我想出了一个解决方案,它或多或少是通过滥用可以将数组读取为单个String
s 的事实。我添加了行config.setAttributeSplittingDisabled(true);
。结果如下:
在这种情况下,似乎在创建 bean 时BeanHelper
实现了数组并能够选择正确的方法。
由于这使我的配置有点不灵活,我想知道是否有可能XMLBeanDeclaration
在早期阶段让 to 处理数组以避免调用config.setAttributeSplittingDisabled(true);
?
我正在使用 Java 8、配置 1.10 和 BeanUtils 1.9.2。
java - 如何在 Apache Commons 配置中保存用属性文件中的值填充的 xml 配置无法保存
我正在尝试在 groovy 脚本中使用 Apache Commons Configuration 从简单的属性文件中读取值,并使用该文件中的这些值填充 XML 模板。此示例的目标是能够使用属性文件中定义的设置启动多个 Tomcat 实例。尽管 Apache Commons Configuration 框架很怪异,但它被选中是因为它能够开箱即用地读取/写入/验证不同的配置类型。
模板是一段tomcat的server.xml:
和属性文件(比如说 tomcat.properties):
我使用 DefaultConfigurationBuilder 将这些文件组合到配置中。定义文件正在动态创建。代码:
保存的文件与上面的 server.xml 相同。例如,使用 port="${tomcat.server.port}" 有没有办法用属性文件中的值保存它?
maven - 无法在 Maven Web 项目中使用 Commons Configuration 读取 config.properties
我正在尝试使用 Commons-configuration api 为我的 maven Web 项目读取放置在 src/main/resources 文件夹中的 config.properties 文件。对于普通的 maven 项目,我可以毫无问题地使用它,但在 web 项目中,这不知何故不起作用。这是我的 pom.xml
我正在使用下面的代码阅读这个文件
我是否错过了 pom.xml 中的任何内容。请帮忙!
java - 如何使用 apache commons 从流中加载 xml 配置?
我想使用 apache commons configuration 1.10 来管理 xml 配置。
我的配置在远程服务器中,所以我需要从流中读取它。
类似的东西有从流中读取的java.util.Properties
方法。load
检查文档我没有找到任何可以帮助我的东西。
谁能帮助我如何获得所需的输出?
java - 使用 Apache commos 配置针对 xsd 验证 xml
我是 XML 的新手。
我使用 Apache Commons XMLConfiguration 进行配置。
我需要一个基于模式的验证。
xsd 位于我的 java 项目的资源文件夹中。
xml 和 xsd 不在同一位置。
遵循文档(仅报告 DTD 的示例)。我产生以下代码:
我得到以下异常:
我的 config.xsd:
我的 config.xml
谁能帮我?
java - Apache commons config:从默认值生成配置文件
我想在一个 jar 中分发我的应用程序。这意味着我不想随它附带任何外部文件,这也包括我不想随我的项目附带默认配置文件。
我当然可以使用 JDOM2 的实现来构建基本的 XML 结构,或者将其从类路径复制到文件系统中,但是 Commons Configuration 实现了开箱即用的变体吗?
我只找到了解释阅读和处理现有配置文件的在线文档。
我会想象这段代码会接受一些键 - >值对,然后生成一个新的配置,这可能吗?
请不要为我提供 XML 文件的任何替代方案,请专门针对我询问的实现回答这个问题。如果您知道任何信息,您可以建议一个替代 Commons Configuration 的方法来完成我需要做的事情。
java - 如何在运行时设置 logback 配置文件?
我想在我的暂存环境中有一个用于生产的 logback.xml 文件和另一个具有不同参数的文件。我的代码能够在运行时自动知道它是在生产还是运行时。有没有办法在运行时设置 logback 配置文件?