0

今日、私はmaven-assembly-pluginを使用してmavenプロジェクトを実行可能jarにコンパイルしました。ただし、これを行った後、私のjarファイルはパスを解決できませんでした。

これをpom.xmlに追加しました

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.1</version>
<executions>
    <execution>
        <id>package-jar-with-dependencies</id>
        <phase>package</phase>
        <goals>
            <goal>single</goal>
        </goals>
        <configuration>
            <appendAssemblyId>false</appendAssemblyId>
            <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
            <archive>
                <manifest>
                    <mainClass>de.main.Main</mainClass>
                </manifest>
            </archive>
        </configuration>
    </execution>
</executions>
</plugin>

このプロジェクトは別のプロジェクトに依存しています。pom.xmlで依存関係を設定します。そして、この扶養家族のプロジェクトは現在彼のリソースを見つけることができません。リソースへのパスは/src/ main / resources/Langでした。maven-installを実行した後、このフォルダーは/ classes/Langに移動されました。私の扶養家族プロジェクトは現在、この道を見つけることができません。

どうすればこの問題を解決できますか?

4

3 に答える 3

1

中のものsrc/main/resourcesはクラスパス上で進行中であり、ファイルシステムにあるファイルとしてではなく、リソースとしてクラスローダーを介してアクセスする必要があります。jarファイル内で配信されたときにそのようなリソースにアクセスする方法を考えてみてください。

さまざまなjarファイルを取り巻くファイルシステムにファイルが存在する必要がある場合は、別のメカニズムを使用する必要があります。

于 2012-12-23T10:56:34.777 に答える
1

問題は、私が推測したように、リソースを正しくロードしていないことです。ファイルIOを使用して、ファイルではなく、クラスパスにあるjarファイルのエントリにアクセスしています。考えてみてください。アプリケーションのエンドユーザー(またはライブラリを使用している開発者)にjarを渡すと、彼のコンピューターにはsrc / main / resources/Langがありません。開発環境src/main/resourcesでのファイルの場所です。

ランタイムクラスパスのjarのルートにあるLangファイルの内容をロードするには、次を使用します。

InputStream in = SomeClass.class.getResourceAsStream("/Lang");

また

InputStream in = getClass().getClassLoader().getResourceAsStream("Lang");

注:jarファイルの内容を表示するには、任意のzipツールで開くか、コマンドを使用します

jar -tf theFile.jar
于 2012-12-23T11:10:38.377 に答える
0

アセンブリxmlでは、dependencySetを使用する必要があります。

<assembly
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <id>my-assembly</id>

...

<dependencySets>
   <dependencySet>
      <outputDirectory>/</outputDirectory>
      <useProjectArtifact>true</useProjectArtifact>
      <unpack>true</unpack>
      <scope>runtime</scope>
   <includes>
    <include>groupId:artifactId</include>
   </includes>
   </dependencySet>
</dependencySets>

Mavenアセンブリプラグインを参照してください。

于 2012-12-23T09:56:25.777 に答える