14

maven によって管理されている Java プロジェクトで、春と休止状態を使用しています。次のコマンドを使用してアセンブリ(依存関係のあるjar)を作成しましたmvn install assembly:assembly

今、コマンドでメインクラスを実行しようとすると、java -cp xyz-1.0-SNAPSHOT-jar-with-dependencies.jar com.xyz.class次のエラーが発生します。

org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/data/jpa]**
Offending resource: class path resource [xyz-component-scans-config.xml]

    at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
    at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:76)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:271)
.
.

NamespaceHandler が見つからない理由がわかりません。pom には既に次の依存関係があるためです。

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>3.1.0.RELEASE</version
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-jpa</artifactId>
      <version>1.0.2.RELEASE</version>
      <type>jar</type>
      <scope>compile</scope>
    </dependency> 
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>3.1.0.RELEASE</version>
      <scope>compile</scope>
    </dependency>

次のスレッドの提案を試しましたが、うまくいきませんでした。 XML スキーマ名前空間の Spring NamespaceHandler が見つかりません [http://www.springframework.org/schema/data/jpa]

org.springframework.beans.factory.parsing.BeanDefinitionParsingExceptionのソースコード

4

4 に答える 4

14

依存関係のある jar を作成するには、maven-shade-plugin を使用する方がよい場合があります。プラグインの使用方法の例を次に示します。

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-shade-plugin</artifactId>
          <version>2.1</version>
          <executions>
            <execution>
              <phase>package</phase>
              <goals><goal>shade</goal></goals>
              <configuration>
                <transformers>
                  <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                    <mainClass>com.stackexchange.stackoverflow.ExecutableJar</mainClass>
                  </transformer>
                  <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                    <resource>META-INF/spring.handlers</resource>
                  </transformer>
                  <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                    <resource>META-INF/spring.schemas</resource>
                  </transformer>
                </transformers>
              </configuration>
            </execution>
          </executions>
        </plugin>

私の経験では、maven-shade-plugin が uber jar を作成する最良の方法です。より完全な例については、他のSO の回答を参照してください。この例ではサードパーティの jar は必要ありませんが、maven-shade-plugin はそれらを適切に処理することに注意してください。試してみます!:-)

于 2013-11-26T23:13:41.337 に答える
1

これには [one-jar] プラグイン ( https://code.google.com/p/onejar-maven-plugin/ ) を使用しました。

私は同じ問題を抱えていました。つまり、maven アセンブリが私の spring.schema ファイルを台無しにしていたのです。(Mavenのプラグインはこれを行うことが知られています(同じ問題を経験している別の人からの春のフォーラムリンク))。

ここで何が起こっているのか本当に知りたい場合は、.jar ファイルを展開して spring.schema および spring.handlers ファイルを見てください。maven のアセンブリ プラグインの製品を見て、これらのファイルがどのように使用されているかを説明しているスタック オーバーフローの投稿( spring.handlers と spring.schemas の理解が必要) を読んでください。

于 2013-11-20T16:01:22.670 に答える
0

WEB-INF/lib フォルダー内に Spring jar があることを確認できますか?

また、存在するバージョンが 1 つだけであることも確認してください。

それでもうまくいかない場合は、既に貼り付けたボディの部分に加えて、設定のヘッダーを添付していただけると助かります。

于 2013-11-27T15:19:00.287 に答える
-2

私は Maven アセンブリの目標にあまり詳しくありませんが、これらの依存関係をコンパイル時のみにスコープしたという事実は、これらの依存関係がアセンブリに含まれていないことを意味する可能性があります。以下を削除してみてください:

<scope>compile</scope>

依存関係宣言の一部ですか?

于 2013-11-26T16:44:34.847 に答える