2

小さなアプリがあり、テストして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 クラスを直接実行すると、正常に動作します。しかし、それをjarにパックして実行すると、エラーが表示されます:

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ファイルを調べると、プロパティファイルはディレクトリにあります。jar tf kietemplate.jar

どんな助けでも大歓迎です。

編集:プロパティを読み取るようにロジックを変更しました:

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){}
}

jar ファイルの親ディレクトリにプロパティ ファイルが必要です。

4

1 に答える 1

0

あなたのコードは、JAR とファイルシステムの両方から、私のコンピューターで正常に動作します。

この動作の原因として考えられるのは、ファイル システムでは大文字と小文字が区別されないが、jar ファイルでは大文字と小文字が区別されることです。しかし、ソース コードだけでは、それを判断することはできません。

于 2013-07-08T05:24:06.890 に答える