2011-10-04 120 views
17

我的代码正确使用如下:的Apache的共享配置

package org.minuteware.jgun; 

import org.apache.commons.configuration.*; 

class ConfigReader { 
    public void getconfig() { 
     Configuration config; 
     try { 
      config = new PropertiesConfiguration("gun.conf"); 
     } catch (ConfigurationException e) { 
      e.printStackTrace(); 
     } 
     String day = config.getString("sync_overlays"); 
     System.out.println(day); 
    } 
} 

Eclipse有两个问题与此代码:

  1. 对于package org.minuteware.jgun;线,它说The type org.apache.commons.lang.exception.NestableException cannot be resolved. It is indirectly referenced from required .class files
  2. 对于线} catch (ConfigurationException e) {它说No exception of type ConfigurationException can be thrown; an exception type must be a subclass of Throwable

我发现ConfigurationException in Java?,但提供的解决方案没有帮助。

回答

38

Apache Commons Configuration的核心具有以下runtime dependencies

将它们放入类路径中。您的特定问题是由于缺少Lang依赖引起的。

+8

问题是我有Lang3,但需要传统的Lang2。很奇怪,它不支持版本3. –

+0

公平点,我将编辑答案,包括在依赖页面中提到的版本号。 – BalusC

+0

@Andriy Yurchuk - Apache为Lang3创建属性文件的新方法。请参阅下面的'答案'。我知道它几年后,但希望这可能会有助于有人在同样的问题挣扎。 – joshpt

0

这个问题困扰了我几天,直到我弄清楚为什么Apache想让我使用旧的库。

如果您被编译器请求使用旧的Lang库,请确保您以新的方式创建Apache属性文件,而不是旧的方式(使用旧的lang库)。 https://commons.apache.org/proper/commons-configuration/userguide/howto_filebased.html 是我派生我的下面的代码的Apache站点,它对Windows机器上的文件执行基本的SET操作。

import org.apache.commons.configuration2.Configuration; 
import org.apache.commons.configuration2.FileBasedConfiguration; 
import org.apache.commons.configuration2.PropertiesConfiguration; 
import org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder; 
import org.apache.commons.configuration2.builder.fluent.Parameters; 

public final class Settings implements Serializable { 

private Configuration config; 
private String propertiesFilePath; 
private FileBasedConfigurationBuilder<FileBasedConfiguration> builder; 

public Settings(String propertiesFilePath) { 
    Parameters params = new Parameters(); 
    File propFile = new File(propertiesFilePath); 
    builder = new FileBasedConfigurationBuilder<FileBasedConfiguration>(PropertiesConfiguration.class) 
      .configure(params.fileBased() 
        .setFile(propFile)); 
    try { 
     config = builder.getConfiguration(); 
    } catch (Exception e) { 
     System.out.println("Exception - Settings constructor: " + e.toString()); 
    } 
}//end constructor 

public void setValue(String key, String value) throws Exception { 
     config.setProperty(key, value); 
     builder.save(); 
}// end setter method 
}//end class