web-dev-qa-db-ja.com

Maven:外部リソースを追加します

Mavenを使用して実行可能なjarファイルを作成しています。つまり、「Java-jarfile.jar」を使用して実行します。

ユーザー定義のプロパティ(キー/値を含むファイルのみ)に依存したいのですが、開発フェーズでは、「user.properties」ファイルをmaven/src/main/resources /フォルダーに配置していました。

私のプロパティファイルは次のものでロードされます:

final Properties p = new Properties();
final InputStream resource = IOParametres.class.getResourceAsStream("/user.properties");
p.load(resource);

今、私はそのファイルをJARの外に保持し、次のようなものを作成したいと思います。

- execution_folder
   |_ file.jar
   |_ config
      |_ user.properties

Maven-jar-plugin、maven-surefire-plugin、maven-resources-pluginなどのmavenプラグインで多くのことを試しましたが、機能しません...

よろしくお願いします!

9
GournaySylvain

Maven構成のみを使用して必要なものを見つけました。

まず、configフォルダーをクラスパスに追加します。

<build>
<plugins>
<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.3.1</version>
    <configuration>
        <archive>
            <manifestEntries>
                <Class-Path>config/</Class-Path>
            </manifestEntries>
        </archive>
    </configuration>
</plugin>
</plugins>
</build>

以前と同じ方法でリソースをロードします。

final InputStream resource = IOParametres.class.getResourceAsStream("/user.properties");
p.load(resource);

また、サンプルリソースファイルをリポジトリに保持し、ビルドから削除する場合は、次のようにします。

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <excludes>
                <exclude>user.properties</exclude>
                <exclude>conf/hibernate.cfg.xml</exclude>
            </excludes>
        </resource>
    </resources>
</build>

Jarファイルの横に、必要なすべてのリソースファイルを保持するconfigフォルダーを追加します。

結果は次のとおりです。

  • user.propertiesは、getResourceAsStreamを使用してロードできます。
  • 特定のリソースに依存している他のライブラリ(私は議論しませんが、私はそれを見つけます...それほど良くありません)は問題なくリソースをロードできます。

助けてくれてありがとう、そしていつか誰かに役立つことを願っています!

16
GournaySylvain

コメントで述べたように、user.propertiesファイルを単にjarの横にあるテキストファイルとして使用したいようです。その場合、それを使用するよりもかなり単純です-実行時にチェックすると、jarファイルを含むディレクトリが現在のディレクトリになります。つまり、必要なのは次のことだけです。

properties.load(new FileInputStream("config/user.properties"));

プロジェクトのクラスパスに入れようとせずに。

また、他に何かする必要がある場合は、プロパティをリソースディレクトリからターゲットにコピーするだけで、手作業で行う手間を省くことができます。これは、maven-antrun-pluginによって実現できます。

        <plugin>
            <groupId>org.Apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
                <execution>
                    <phase>generate-resources</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <tasks>
                            <mkdir dir="${project.build.directory}" />
                            <copy file="${basedir}/src/main/resources/user.properties" tofile="${project.build.directory}/config/user.properties" />
                        </tasks>
                    </configuration>
                </execution>
            </executions>
        </plugin>
1
Deltharis