5

Maven を使用して、次の db2 jar を Java Web アプリケーションに追加しようとしています...

db2jcc_license_cu.jar  
db2jcc_javax.jar   
db2jcc.jar

この投稿に投稿された指示に従っています... jar をインストールせずに maven 2 ビルド クラスパスに追加できますか?

静的なプロジェクト内リポジトリ ソリューションを使用したいと考えています。これまでのところ...

  1. libという名前のルートディレクトリにフォルダーを作成しました。このディレクトリ内には、3 つの db2 jar が存在します。
  2. 私のpomファイルに以下を追加しました...
 <repository>
        <id>lib</id>
        <releases>
            <enabled>true</enabled>
            <checksumPolicy>ignore</checksumPolicy>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <url>file://${project.basedir}/lib</url>    
 </repository> 
 </repositories>
<dependency> 
    <groupId>com.ibm.db2.jcc</groupId>
    <artifactId>db2jcc</artifactId>
    <version>3.8.47</version>
</dependency>
<dependency>
    <groupId>com.ibm.db2.jcc</groupId>
    <artifactId>db2jcc_license_cu</artifactId>
    <version>3.8.47</version>
</dependency>

しかし、maven install を実行すると...

[WARNING] The POM for com.ibm.db2.jcc:db2jcc:jar:3.8.47 is missing, no dependency information available
[WARNING] The POM for com.ibm.db2.jcc:db2jcc_license_cu:jar:3.8.47 is missing, no dependency information available

実行してJarのバージョンを取得しました...

Java com.ibm.db2.jcc.DB2Jcc -バージョン

このバージョン情報を正しく指定しましたか? 誰かが私が間違っていることを提案できますか?

4

3 に答える 3

10

${project.basedir}/lib問題は、jarを「project-maven-repository」(つまり、フォルダー内)に正しくインストールしなかったことです。

Mavenは(実行するとmvn install)jarファイルをMavenリポジトリに保存します。Mavenリポジトリは正確な階層構造を持っています。この構造の簡略化されたビジョンは次のとおりです。

  • アーティファクトgroupId+artifactIdアーティファクトが保存される(リポジトリ内の)フォルダパスの最初の部分を定義します。
  • アーティファクトversionはフォルダパスの2番目の部分です
  • アーティファクトversionはアーティファクト名の接尾辞でもあります
  • これartifactIdはアーティファクト名です
  • パッケージはアーティファクト拡張です(デフォルトはjarです)

デフォルトでは、Mavenは下にあるリポジトリを使用します<USER_HOME>/.m2/repository

セットアップしようとしているソリューションは、リポジトリに別の場所を使用します。${project.basedir}/libデフォルトのリポジトリの場所でなくても、Mavenリポジトリであるため、Mavenはこの場所の下に通常のMavenリポジトリ階層を見つけることを期待しています。

${project.basedir}/libそのため、Mavenリポジトリのようにフォルダを整理する必要があります。これは、参照されている投稿のこの部分で説明されています:

Mavenを使用してプロジェクトリポジトリにインストールします

この構造を手動で作成する代わりに、Mavenプラグインを使用してjarをアーティファクトとしてインストールすることをお勧めします。したがって、repoフォルダーの下のプロジェクト内リポジトリにアーティファクトをインストールするには、次のコマンドを実行します。

mvn install:install-file -DlocalRepositoryPath=lib -DcreateChecksum=true -Dpackaging=jar -Dfile=[your-jar] -DgroupId=[...] -DartifactId=[...] -Dversion=[...]

このアプローチを選択すると、pomのリポジトリ宣言を次のように簡略化できます。

<repository>
    <id>repo</id>
    <url>file://${project.basedir}/lib</url>
</repository>

mvn installしたがって、階層を作成するためにを実行する必要があり${project.basedir}/libます(手動で作成することもできますが、推奨されておらず、エラーが発生しやすくなります)。

私の場合、実行するコマンドは次のようになります:(jarをHOME_DIRに置き、このコマンドをで実行すると仮定します${project.basedir}

mvn install:install-file -DlocalRepositoryPath=lib -DcreateChecksum=true -Dpackaging=jar -Dfile=<USER_HOME>/db2jcc_license_cu.jar -DgroupId=com.ibm.db2.jcc -DartifactId=db2jcc_license_cu -Dversion=3.8.47

選択したアプローチの利点は何ですか:

  • Mavenをセットアップしていない開発者は、SCMシステムの下でプロジェクトソース内でライブラリを利用できるようになります。
  • アーティファクトネクサスなどを必要とせずに、パブリックMavenリポジトリにないjarを簡単に参照できます。

欠点:

  • ${project.basedir}/libMavenでの作業に慣れていない人にとっては、非常に奇妙に見える非常に複雑なフォルダー構造です。
  • ライブラリをSCM(大量の巨大なバイナリファイル)の下に保存します
于 2013-03-14T01:15:00.837 に答える
2

別の解決策は、これらの jar を事前にダウンロードし、プロジェクトに対して相対的な場所 (libディレクトリなど) に配置することです。これらの jar を使用するように maven に指示するだけです。ここでgroupIdartifactdIdversionは JFYI です。これらはダウンロードには使用されないためです。

このソリューションのメリットは、Maven リポジトリを構築する必要がないことです。

<dependencies>
    ...      
    <dependency>
        <groupId>com.ibm.db2.jcc</groupId>
        <artifactId>licences</artifactId>
        <version>1.0</version> <!-- Adjust this properly -->
        <scope>system</scope>
        <systemPath>${basedir}/lib/db2jcc_license_cu.jar</systemPath>
    </dependency>
    <dependency>
        <groupId>com.ibm.db2.jcc</groupId>
        <artifactId>db2jcc4</artifactId>
        <version>1.0</version> <!-- Adjust this properly -->
        <scope>system</scope>
        <systemPath>${basedir}/lib/db2jcc4.jar</systemPath>
    </dependency>
    <dependency>
        <groupId>com.ibm.db2.jcc</groupId>
        <artifactId>db2jcc_javax</artifactId>
        <version>1.0</version> <!-- Adjust this properly -->
        <scope>system</scope>
        <systemPath>${basedir}/lib/db2jcc_javax.jar</systemPath>
    </dependency>
</dependencies>

参照リンク (日本語): Maven リポジトリで提供されていないサードパーティJar をどうするか

于 2016-08-22T07:23:20.963 に答える