2011-10-04 15 views
17

私のコードは以下の通りです:のApache Commonsの設定の適切な使用

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は、このコードには二つの問題があります。それはラインのためにThe type org.apache.commons.lang.exception.NestableException cannot be resolved. It is indirectly referenced from required .class files

  • を言うpackage org.minuteware.jgun;ラインについては

    1. } 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ライブラリをコンパイラで使用するように要求されている場合は、以前の方法(古いlangライブラリを使用)ではなく、Apacheのプロパティファイルを新しい方法にしてください。 https://commons.apache.org/proper/commons-configuration/userguide/howto_filebased.html は私のWindowsマシン上のファイルに対して基本的なSET操作を行う次のコードを派生したApacheサイトです。

    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