1

Netbeans には、com.foo.bar と com.foo.baz という 2 つの Maven プロジェクトがあります。

com.foo.bar は com.foo.baz の依存関係です。

bar
+-src
| +-main
|   +-java
|   | +-com
|   |   +-foo
|   |     +-bar
|   |       +-App.java
|   +-resources
|     +-com
|       +-foo
|         +-bar
|           +-config.properties
+-target
| +-classes
|   +-com
|     +-foo
|       +-bar
|         +-App.class
|         +-config.properties
+-pom.xml

Netbeans で、クリックしてプロジェクト baz->dependencies->bar->com.foo.bar を展開すると、bar/target/classes/com/foo/bar と同じ内容が表示されます。大丈夫だと思います。

com.foo.bar には行があります

// print current directory
System.out.println(new File(".").getAbsolutePath());

// load config files
Properties conf = new Properties();
conf.load(new FileInputStream(config.properties));

com.foo.baz は似ていますが、何もありませんresources/。依存関係のある com.foo.bar と com.foo.baz をビルドしてから com.foo.baz を実行すると、

/home/user/NetBeansProjects/baz/.
java.io.FileNotFoundException: config.properties (No such file or directory)

これはクラスパスの問題ですか、それとも何ですか? Maven がこれを処理するべきではありませんか?

4

2 に答える 2

1

config.propertiesクラスからをロードする場合は、次のAppように実行できます。

public class App {

    public void someMethod() {
        InputStream is = getClass().getResourceAsStream("config.properties");
        Properties properties = new Properties();
        try {
            properties.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("foo = " + properties.getProperty("foo"));
    }

    public static void main(String[] args) {
        App app = new App();
        app.someMethod();
    }
}

config.properties、 で使用されるクラスに関連していgetResourceAsStream()ます。

于 2012-09-26T18:57:36.283 に答える
0

次のように、ファイルへのパス全体を追加する必要があります

conf.load(new FileInputStream("com/foo/bar/config.properties"));

ファイルをリソース内のルート フォルダーに配置すると、パスがなくても機能します。

bar
+-src
| +-main
|   +-java
|   | +-com
|   |   +-foo
|   |     +-bar
|   |       +-App.java
|   +-resources
|       +-config.properties
(...)
于 2012-09-26T18:49:49.570 に答える