2

私はJavaSEで基本的なMavenプロジェクトをセットアップしました。リソースは次のとおりです。

main 
  -java
  -resources
    -config -> database.properties

このリソースを最終的なjarに入れたくないので、次のように定義します。

 <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <excludes>
                    <exclude>config/database.properties</exclude>
                </excludes>
            </configuration>
            <executions>
                <execution>
                    <id>make-jar-ultimateParser</id>
                    <phase>package</phase>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/dist</outputDirectory>
                        <finalName>testApp</finalName>
                        <archive>
                            <compress>false</compress>
                            <!-- Manifest - MainClass & ClassPath -->
                            <manifest>
                                <mainClass>aa.bb.Class</mainClass>
                                <addClasspath>true</addClasspath>
                                <classpathPrefix>lib/</classpathPrefix>
                            </manifest>
                            <manifestEntries>
                                <Class-Path>config/database.properties</Class-Path>
                            </manifestEntries>
                        </archive>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <!-- Copy configuration files -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.6</version>
            <executions>
                <execution>
                    <id>copy-resources</id>
                    <phase>validate</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/dist/config</outputDirectory>
                        <resources>
                            <resource>
                                <directory>src/main/resources/config</directory>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.0</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
    </plugins>
</build>

したがって、リソースはクラスパス上にあり、リソースを含むディレクトリは最終的なjarにコピーされます。

私のマニフェストは次のようになります: "Class-Path:config / database.properties"

しかし、私はそれを読むことができません:

String db = "/config/database.properties";
properties = new Properties();
properties.load(getClass().getResourceAsStream(db));

絶対/相対パスを試しgetClass()/ClassLoaderました。何もない。NetBeansでも問題なく動作しますが、それだけです。

4

2 に答える 2

1

Mavenリソースプラグインの機能を誤解しています。リソースを(おそらく変換を使用して)ビルド出力ディレクトリにコピーするだけです。次に、それらがビルドアーティファクト(JAR、WARなど)に含まれる場所。

これを機能させるには(Class-Pathマニフェストエントリを使用してJARのディレクトリを参照する)、構成ファイルを個別に配布する必要があります。またはFile、クラスパスを気にせずに、を使用して参照します。

より良いアプローチは、コアアプリ、依存関係、および構成ファイルを含むアセンブリとしてアプリケーションを配布することです。これは通常、ZIPファイルとしてパッケージ化され、ユーザーはそれを解凍してインストールします。

于 2013-01-07T20:31:40.460 に答える
0

なぜあなたがそれを除外しているのか分かりません。Mavenは独自のリソースディレクトリを使用します。プロジェクト|-pom.xml -- src --main`-プログラマーの生活を楽にするリソース。この方法を使用する場合、classpatchなどを取得する必要はありません。

于 2014-08-31T01:29:10.500 に答える