2011-10-04 16 views
17

Mi código es el siguiente:El uso apropiado de configuración Commons 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 tiene dos problemas con este código:

  1. para la línea package org.minuteware.jgun; que dice The type org.apache.commons.lang.exception.NestableException cannot be resolved. It is indirectly referenced from required .class files
  2. Para la línea } catch (ConfigurationException e) { dice No exception of type ConfigurationException can be thrown; an exception type must be a subclass of Throwable

He encontrado ConfigurationException in Java?, pero la solución provista allí no ayuda.

Respuesta

38

El núcleo de Apache Commons Configuration tiene la siguiente runtime dependencies:

Colóquelos en su classpath también. Su problema particular es causado por una falta de dependencia de Lang.

+8

El problema era que tenía Lang3, pero se necesitaba el legado Lang2. Es bastante extraño que no sea compatible con la versión 3. –

+0

De acuerdo, editaremos la respuesta para incluir los números de versión como se menciona en la página de dependencias. – BalusC

+0

@Andriy Yurchuk - Apache tiene una nueva forma de archivo de propiedades para Lang3. Por favor vea mi 'respuesta' a continuación. Sé que es unos años más tarde, pero espero que pueda ser útil para alguien que está luchando con este tipo de problema. – joshpt

0

Este número de la biblioteca me atormentó por unos días hasta que descubrí por qué Apache quería que usara bibliotecas antiguas.

Si el compilador le solicita utilizar bibliotecas Lang más antiguas, asegúrese de que está haciendo su archivo de propiedades Apache de la NUEVA manera, no de la manera antigua (que utiliza las bibliotecas lang antiguas). https://commons.apache.org/proper/commons-configuration/userguide/howto_filebased.html es el sitio de Apache del que obtuve mi siguiente código, que hace una operación básica de SET contra un archivo en mi máquina con Windows.

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 
Cuestiones relacionadas