7

依存症があります

    <dependency>
        <groupId>de.matthiasmann</groupId>
        <artifactId>twl</artifactId>
        <version>1.0.0</version>
        <scope>system</scope>
        <systemPath>${project.basedir}/lib/TWL.jar</systemPath>
    </dependency>

次に、実行しmvn assembly:assemblyます。すべてのネイティブ ファイルとリモート Maven ライブラリが追加されますが、この jar はありません。

アップデート

でアプリを実行しようとしているときjava -jar myjar.jar。上記の依存関係からクラスが存在しないというエラーを返します (NoClassDefFoundError : de.matthiasmann.twl.ForExample)。この jar から myjar.jar にクラスを追加したい (maven がリモート依存関係で行うことと同じ)。それを行うようにmavenを構成するにはどうすればよいですか?

4

4 に答える 4

8

Java EEサーバー/コンテナーにそのjarが構成されていない限り、systemPathを使用することはできません。

Mavenは開発とコンパイル時のみであることを忘れないでください。warファイルがビルドされると、mavenは、必要なすべてのjarをWEB-INF/libフォルダーに配置したことを除いて効果がありません。

システムスコープを指定する場合、戦争が展開されたときにjarが存在することを確認するのはユーザーの責任であることを意味します。あなたはすでにそれを行うためのフレームワークを持っていて、そのjarでビルドの依存関係を邪魔したくないのですが、開発中にのみMavenで利用できるようにする必要があります。

他の同様のスコープは「提供」されます。たとえば、JBossまたは企業の共通デプロイメントTomcatフレームワークは、サーバーの起動によってロードされ、サーバー内のすべてのアプリに共通のSpringやHibernateなどの多くのjarをすでに提供しています。したがって、mavenビルドでそれらをwarファイルに含めることは望ましくありません。

正しい方法では、Mavenの達人が教えてくれます。独自のMavenサーバーを用意し、必要なアーティファクトをそのサーバーに組み込むことです。ただし、それが不可能な場合もあります。

したがって、そのような場合は、プロジェクトと一緒に配布され、バージョン管理にチェックインされるプロジェクトレベルのリポジトリを作成します。コマンドを実行してmvn install、「project-repo」などのプロジェクトレベルのディレクトリを作成します。

http://maven.apache.org/plugins/maven-install-plugin/examples/specific-local-repo.html(慣れているため、ほとんどの場合、mvn installを実行するのではなく、手動でリポジトリを構築します)。

次に、POMで、リポジトリの1つとしてfile:// $ {project.basedir}/project-repoを指定します。これに関する注意点は、Windowsでは、Windowsファイルシステムパスを参照するときに、「file://」の後のペア以外のスラッシュをバックスラッシュにする必要があることです。

  <repositories>
    <repository>
      <id>my-repo1</id>
      <name>my custom repo</name>
      <url>http://ho.ho.ho</url>
    </repository>
    <repository>
      <id>project-repo</id>
      <name>my project repo</name>
      <url>file://${project.basedir}\project-repo</url>
    </repository>
  </repositories>
于 2012-11-13T02:00:35.783 に答える
8

システムの依存関係が含まれていない理由とその回避方法については、依存関係のある Maven 2 アセンブリ: スコープ "システム" の jar が含まれていないを参照してください。具体的には、mvn install:install-fileコードが必要なものです。

于 2012-11-13T01:34:28.940 に答える
1

これはさまざまな方法で実装できます。以下のブログを参照してください。

http://blog.valdaris.com/post/custom-jar/

于 2014-07-11T12:11:46.603 に答える
0

このような依存関係がある場合、最善の解決策は、最初にリポジトリ マネージャーを使用し、その依存関係をリポジトリ マネージャーに単純に配置してから、単純な依存関係として使用することです。

于 2012-11-13T08:40:11.940 に答える