2011-10-04 60 views
17

Mã của tôi là như sau:sử dụng đúng cách Apache Commons Cấu hình

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 có hai vấn đề với mã này:

  1. Đối với dòng package org.minuteware.jgun; nó nói The type org.apache.commons.lang.exception.NestableException cannot be resolved. It is indirectly referenced from required .class files
  2. Đối với dòng } catch (ConfigurationException e) { nó nói No exception of type ConfigurationException can be thrown; an exception type must be a subclass of Throwable

Tôi đã tìm thấy ConfigurationException in Java?, nhưng giải pháp được cung cấp ở đó không có tác dụng.

Trả lời

38

Cốt lõi của Apache Commons Configuration đã sau runtime dependencies:

Đặt chúng vào đường dẫn lớp học của bạn. Vấn đề cụ thể của bạn là do sự thiếu phụ thuộc của Lang.

+8

Vấn đề là tôi đã có Lang3, nhưng di sản Lang2 là cần thiết. Khá lạ là nó không hỗ trợ phiên bản 3. –

+0

Điểm công bằng, tôi sẽ chỉnh sửa câu trả lời để bao gồm các số phiên bản như đã đề cập trong trang phụ thuộc. – BalusC

+0

@Andriy Yurchuk - Apache có một cách mới để làm tệp thuộc tính cho Lang3. Vui lòng xem 'câu trả lời' của tôi bên dưới. Tôi biết nó một vài năm sau đó, nhưng hy vọng nó có thể hữu ích cho một người nào đó đấu tranh với cùng một loại vấn đề. – joshpt

0

Sự cố thư viện này đã cản trở tôi trong một vài ngày cho đến khi tôi tìm ra lý do Apache muốn tôi sử dụng thư viện cũ.

Nếu bạn đang được yêu cầu sử dụng thư viện Lang cũ hơn bởi trình biên dịch, hãy đảm bảo bạn đang tạo tệp thuộc tính Apache theo cách MỚI chứ không phải cách cũ (sử dụng thư viện lang cũ). https://commons.apache.org/proper/commons-configuration/userguide/howto_filebased.html là trang web Apache mà tôi lấy được mã sau đây của mình, hoạt động SET cơ bản dựa vào tệp trên máy tính Windows của tôi.

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 
Các vấn đề liên quan