1

У меня есть небольшое приложение, и я тестировал и упаковывал в jar, и я пытаюсь запустить его, но у меня есть ошибка.Не удается загрузить свойства из jar

Вот моя структура проекта:

src 
    -kie.template 
    ----- ServerMain.java ==> Class with main 
    -kie.template.util 
    ---- PropUtils.java 
    ---- server.properties 
target 
    -kietemplate.jar 
    ---- lib 

В главном методе PropUtils класс читает свойства.

public class PropUtils { 

    private static final String PROPERTIES = "server.properties"; 

    public static Properties load() { 
    Properties properties = new Properties(); 
      InputStream is = null; 
      try { 
       properties.load(PropUtils.class.getResourceAsStream(PROPERTIES)); 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } finally { 
       if (is!=null) try{is.close();}catch(IOException e){} 
      } 

      return properties; 
     } 
    } 
} 

Когда я запускаю класс ServerMain напрямую, он работает нормально. Но после того, как я упаковал его в банку и бежать, он показывает сообщение об ошибке:

java -cp lib -jar kietemplate.jar 

Caused by: java.lang.NullPointerException 
    at java.util.Properties$LineReader.readLine(Properties.java:418) 
    at java.util.Properties.load0(Properties.java:337) 
    at java.util.Properties.load(Properties.java:325) 
    at au.org.jeenee.kie.template.util.PropUtils.load(PropUtils.java:26) 

Файл свойств находится в каталоге, когда я смотрю в файл банка. jar tf kietemplate.jar

Любая помощь будет оценена очень сильно.

EDIT: Я изменил логику для чтения свойства:

Properties properties = new Properties(); 
InputStream is = null; 
try { 
    File file = new File("server.properties"); 
    is = new FileInputStream(file); 
    properties.load(new InputStreamReader(is)); 
} catch (IOException e) { 
    e.printStackTrace(); 
} finally { 
    if (is!=null) try{is.close();}catch(IOException e){} 
} 

Это требует файл свойств в родительском каталоге файла банки.

+0

Каков путь 'server.properties' в Jar? Сделайте 'jar -tvf kietemplate.jar' и добавьте вывод как редактирование. –

+0

Некоторые имена классов в файле. channel.s911 = mypackge.server.ClientInitializer – sunghun

ответ

0

Ваш код отлично работает на моем компьютере, как из JAR, так и из файловой системы.

Возможная причина такого поведения в том, что файловая система нечувствительна к регистру, но файл jar чувствителен к регистру. Но мы действительно не можем сказать только из исходного кода.

+0

Спасибо за это. Я тестирую MacOSX, и я буду исследовать его больше. – sunghun

+0

Я изменил логику, чтобы немного читать свойства, используя класс File. В любом случае, теперь это работает. – sunghun

Смежные вопросы