我一直在試圖配置一個Java應用程序(特別是我的集成測試),絕對沒有成功。我原來有一個單一的XMLConfiguration,我可以加載和使用沒有問題。我的目錄設置是這樣的:Apache Commons配置 - 無法加載/使用配置文件
- SRC
- 測試
- 的Java
- mypackage的
- 資源
- 的Java
- 測試
之前,我在資源目錄中有一個myconfig.xml文件。我被它加載它,像這樣:
private static XMLConfiguration configuration = null;
public static void configure() {
try {
configuration = new XMLConfiguration("myconfig.xml");
}
catch (ConfigurationException e) {
System.err.println(e);
}
}
現在我試圖讓這個用戶可以在/ etc或/家庭或任何寫一個配置文件來配置應用程序本身,所以我做了一個新的文件在同一位置名爲config-的test.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<configuration>
<!-- Attempt to load configuration provided on the system -->
<xml fileName="/etc/myconf/myconfig.xml" config-optional="true" />
<!-- Load default configuration from the classpath -->
<xml fileName="myconfig.xml" />
</configuration>
文件/etc/myconf/myconfig.xml不存在,但是這使得它可選整點。我已經嘗試了幾種不同的方法來加載我的配置,包括文檔如何操作:http://commons.apache.org/configuration/userguide/howto_configurationbuilder.html。我所擁有的目前是這樣的:
private static CombinedConfiguration configuration = null;
public static void configure() {
try {
DefaultConfigurationBuilder builder =
new DefaultConfigurationBuilder("config-test.xml");
configuration = builder.getConfiguration(true);
System.err.println("Yay");
}
catch (ConfigurationException e) {
System.err.println("Herp");
}
catch (Exception e) {
System.err.println("Derp");
}
}
當我運行我的集成測試,我認爲沒有耶,我看不出有什麼HERP,我看不出有什麼DERP。如果在嘗試加載內容之前放置了println
,則它會打印,因此正在調用configure
。我從公共配置量得到輸出:
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running TestSuite
13:36:57.752 [main] DEBUG o.a.c.c.ConfigurationUtils - ConfigurationUtils.locate(): base is null, name is config-test.xml
13:36:57.753 [main] DEBUG o.a.c.c.DefaultFileSystem - Could not locate file config-test.xml at null: no protocol: config-test.xml
13:36:57.756 [main] DEBUG o.a.c.c.ConfigurationUtils - Loading configuration from the context classpath (config-test.xml)
13:36:57.766 [main] DEBUG o.a.c.c.DefaultConfigurationBuilder - Creating configuration null with name null
13:36:57.795 [main] DEBUG o.a.c.c.ConfigurationUtils - ConfigurationUtils.locate(): base is null, name is config-test.xml
13:36:57.795 [main] DEBUG o.a.c.c.DefaultFileSystem - Could not locate file config-test.xml at null: no protocol: config-test.xml
13:36:57.796 [main] DEBUG o.a.c.c.ConfigurationUtils - Loading configuration from the context classpath (config-test.xml)
13:36:57.800 [main] DEBUG o.a.c.c.DefaultConfigurationBuilder - Creating configuration null with name null
Tests run: 56, Failures: 2, Errors: 0, Skipped: 16, Time elapsed: 2.589 sec <<< FAILURE!
Results :
Failed tests: initialize(mypackage.ImportTestIT): org/apache/commons/beanutils/PropertyUtils
initialize(mypackage.TransferTestIT): org/apache/commons/beanutils/PropertyUtils
Tests run: 56, Failures: 2, Errors: 0, Skipped: 16
這些初始化方法只是打電話configure
,然後試圖從正在加載的配置獲取數據。我已經在這裏工作了幾個小時,可以真的使用另一雙眼睛。有任何想法嗎?有什麼我可以改變的,我沒有提到會影響到這一點?謝謝。
編輯#1(下午1:58):確保的BeanUtils後,在類路徑中,我現在得到的堆棧跟蹤的一個殘酷的爆炸與
Running TestSuite
14:00:16.088 [main] DEBUG o.a.c.c.ConfigurationUtils - ConfigurationUtils.locate(): base is null, name is config-test.xml
14:00:16.089 [main] DEBUG o.a.c.c.DefaultFileSystem - Could not locate file config-test.xml at null: no protocol: config-test.xml
14:00:16.093 [main] DEBUG o.a.c.c.ConfigurationUtils - Loading configuration from the context classpath (config-test.xml)
14:00:16.103 [main] DEBUG o.a.c.c.DefaultConfigurationBuilder - Creating configuration null with name null
14:00:16.178 [main] DEBUG o.a.c.c.ConfigurationUtils - ConfigurationUtils.locate(): base is file:///home/pgarrity/projects/myproject/target/test-classes/config-test.xml, name is /etc/myconf/myproject/myconfig.xml
14:00:16.179 [main] DEBUG o.a.c.c.DefaultFileSystem - Could not locate file /etc/myconf/myproject/myconfig.xml at file:///home/pgarrity/projects/myproject/target/test-classes/config-test.xml: /etc/myconf/myproject/myconfig.xml (No such file or directory)
14:00:16.181 [main] DEBUG o.a.c.c.DefaultConfigurationBuilder - Load failed for optional configuration xml: Cannot locate configuration source /etc/myconf/myproject/myconfig.xml
14:00:16.185 [main] WARN o.a.c.c.DefaultConfigurationBuilder - Internal error
org.apache.commons.configuration.ConfigurationException: Cannot locate configuration source /etc/myconf/myproject/myconfig.xml
at org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:259) ~[commons-configuration-1.8.jar:1.8]
at org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:238) ~[commons-configuration-1.8.jar:1.8]
等等等等開始。 ..但我現在確實看到'耶'。
現在我沒有得到的是,它似乎沒有在尋找我的非可選配置源,或者假設它位於我從未告訴它看起來的位置。
編輯#2: 我通過輸出多一點,埋在從公共我發現,它似乎最終加載正確的文件中的投訴看。我想我可能會工作?也許我的屬性路徑改變,當我像這樣加載它...我有一些東西要嘗試。無論如何,我問到的問題已得到解決。謝謝您的幫助。
奇怪。我已經習慣了Maven處理我的依賴關係,並且它不在那裏 - 我特別添加了它的依賴關係,並且它肯定會改變某些內容。謝謝! – 2012-04-17 18:58:11
我在我的classpath中有這個bean utils,問題仍然存在@Bozho – Napster 2014-03-22 09:45:55