1

maven2 と Java jar プロジェクトに少し問題があります。

これが私のプロジェクトファイルシステムです:

MyApp
  -- /src/main/java
    -- my.package
      -- Main.java
  -- /src/main/resources 
    -- application.properties

Pom.xml は、標準の Maven プラグインを使用してカスタマイズされたパッケージ フェーズを持つように構成されます。

<!-- copy resources from /src/main/resource to target -->
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-resources-plugin</artifactId>
  <version>2.4</version>
  <configuration>
    <outputDirectory>${project.build.directory}</outputDirectory>
    <overwrite>true</overwrite>
  </configuration>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>resources</goal>
      </goals>
    </execution>
  </executions>
</plugin>

<!-- create an executable jar -->
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <version>2.4</version>
  <configuration>
    <finalName>${project.artifactId}-${project.version}</finalName>
    <archive>
      <manifest>
        <addClasspath>true</addClasspath>
        <classpathPrefix>lib/</classpathPrefix>
        <mainClass>my.package.Main</mainClass>
      </manifest>
    </archive>
  </configuration>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>jar</goal>
      </goals>
    </execution>
  </executions>
</plugin>

<!-- copy dependencies jars to target/lib folder -->
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-dependency-plugin</artifactId>
  <version>2.5.1</version>
  <configuration>
    <outputDirectory>${project.build.directory}/lib</outputDirectory>
    <overWriteReleases>false</overWriteReleases>
    <overWriteSnapshots>false</overWriteSnapshots>
    <overWriteIfNewer>true</overWriteIfNewer>
  </configuration>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>copy-dependencies</goal>
      </goals>
    </execution>
  </executions>
</plugin>

この構成を使用して mvn パッケージを呼び出すと、すべて正常に機能します。新しい jar がターゲット フォルダー内に作成され、リソースと依存関係がコピーされます。ファイル application.properties は new File("application.properties") を介して参照され、JRE によって検出されます。ターゲットフォルダーから手動でjarを実行すると機能します!

今私の問題: exec-maven-plugin を追加して、Eclipse 内でプロジェクトを直接実行したいと考えています。pom.xml 内の新しいプラグインは次のとおりです。

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.2.1</version>
  <configuration>
    <executable>java</executable>
    <mainClass>my.package.Main</mainClass>
  </configuration>
</plugin>

このようにして、クラスが実行され、すべての依存関係が満たされますが、リソース (特に application.properties) が見つかりません。これは、プログラムの作業ディレクトリが MyApp/target の代わりに MyApp であるためです。構成を使用しても無駄です。

どうすればこの問題を解決できますか?? 前もって感謝します

4

1 に答える 1

0

さて、2つのことが思い浮かびます。

a)maven execを介して実行せず、Eclipseを介してスタンドアロンアプリケーションとして実行するだけです(IE。メインクラスを実行します)。正しいクラスパスが設定されるように、Eclipse プロジェクトを Maven 化する必要があります。

b) 通常のファイルシステム アクセスを使用しないでください。代わりに、ロードするファイルをクラスパスに配置し、getClass().getClassLoader().getResourceAsStream() を使用してロードします。

于 2012-11-14T12:24:44.420 に答える