jarファイルからプロパティファイルを除外するにはどうすればいいですか? 質問する

jarファイルからプロパティファイルを除外するにはどうすればいいですか? 質問する

次のようなプロジェクト構造を持つ Java アプリケーションがあります。

myProject
  |
  |----src
  |     |
  |     |--main
  |     |
  |     |--resources
  |           |   
  |           |--userConfig.properties
  |           |--log4j.properties
  |
  |---target

Mavenプロジェクトのビルドに使用しています。maven次のコマンドを使用して jar ファイルをビルドします。

mvn package -DMaven.test.skip=true

userConfig.propertiesJAR ファイルからファイルを除外したいので、pom.xml次のように更新しました。

<excludes>
    <exclude>**/userConfig.properties</exclude>
</excludes>

しかし、コンパイルされたコードが存在するターゲット フォルダーからは除外されます。ファイルが見つからないため、アプリケーションは実行されませんuserConfig.properties

誰か助けてくれませんか?

ベストアンサー1

私もこのシナリオに遭遇しました。基本的には、Eclipseからローカルでコードを実行できるようにしたいのですが、ユーザー設定プロパティ内部など、簡単にアクセスできるファイル/src/main/resources。さらに、コンパイルされた実行可能JARを外部に提供したい場合、ユーザー設定プロパティこれにより、ユーザーは JAR をクラックせずにアプリケーションを構成できるようになります。

私の実装は次のとおりです。実行すると次のようにmvn clean installなります。

  • 指定された実行可能なJARファイルを作成するmainClass
  • JARからすべての.propertiesファイルを除外するsrc/main/resources
  • プロジェクトの依存関係をlibプロジェクトルートのフォルダにコピーします。
  • .propertiesにあるすべてのファイルをプロジェクト ルートのフォルダーsrc/main/resourcesにコピーしますconf。この手順は、JAR のユーザーにとって便利なオプションであることに注意してください。このファイルをディレクトリに明示的に作成するように要求できますconf。このconfディレクトリは、マニフェストを介してランタイム クラスパスに効果的に追加されます。
  • このconfフォルダをマニフェストに追加し、実行可能なJARからアクセスできるようにします。

これらの Maven プラグインを POM 構成で相互に組み合わせて使用​​すると、必要なものが得られます。このソリューションの「ベスト プラクティス」については、よくわかりません。

使用Maven 依存関係プラグイン次のように:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-dependency-plugin</artifactId>
  <executions>
    <execution>
      <id>copy-dependencies</id>
      <phase>prepare-package</phase>
      <goals>
        <goal>copy-dependencies</goal>
      </goals>
      <configuration>
        <outputDirectory>${project.build.directory}/lib</outputDirectory>
        <overWriteReleases>false</overWriteReleases>
        <overWriteSnapshots>false</overWriteSnapshots>
        <overWriteIfNewer>true</overWriteIfNewer>
      </configuration>
    </execution>
  </executions>
</plugin>

使用Maven-jarプラグイン次のように:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <version>2.3</version>
  <configuration>
    <excludes>
      <exclude>**/*.properties</exclude>
    </excludes>                    
    <archive>
      <manifest>
        <addClasspath>true</addClasspath>
        <classpathPrefix>lib/</classpathPrefix>
        <mainClass>package.path.to.your.main.class.MainClass</mainClass>
      </manifest>
      <manifestEntries>
        <Class-Path>conf/</Class-Path>
      </manifestEntries>
    </archive>
  </configuration>
</plugin>

使用Maven リソース プラグイン次のように:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-resources-plugin</artifactId>
  <version>2.3</version>
  <executions>
    <execution>
      <id>copy-resources</id>
      <phase>install</phase>
      <goals>
        <goal>copy-resources</goal>
      </goals>
      <configuration>
        <outputDirectory>${basedir}/target/conf</outputDirectory>
        <resources>
          <resource>
            <directory>src/main/resources</directory>
            <includes>
              <include>**/*.properties</include>
            </includes>
          </resource>
        </resources>
      </configuration>
    </execution>
  </executions>
</plugin>

このプロジェクト設定を使用すると、1 つの構成を使用して Eclipse で実行し、プロパティが相互に影響することなく、ユーザーに構成するプロパティ ファイルを提供できます。

おすすめ記事