回答:
jarをソース管理のサードパーティlibに配置し、pom.xmlファイルからの相対パスでリンクします。
これが本当に必要な場合(企業のリポジトリを使用できない場合を理解してください)、私のアドバイスは、プロジェクトのローカルな「ファイルリポジトリ」を使用し、system
スコープの依存関係を使用しないことです。system
スコープ(例えば組み立て中)、このような依存関係は、多くの状況ではうまく機能しない、避けるべきである、彼らは利点よりも多くのトラブルを引き起こします。
したがって、代わりに、プロジェクトにローカルなリポジトリを宣言します。
<repositories>
<repository>
<id>my-local-repo</id>
<url>file://${project.basedir}/my-repo</url>
</repository>
</repositories>
パラメータを使用install:install-file
してそこにサードパーティのlibをインストールしますlocalRepositoryPath
。
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<myGroup> \
-DartifactId=<myArtifactId> -Dversion=<myVersion> \
-Dpackaging=<myPackaging> -DlocalRepositoryPath=<path>
更新:プラグインのバージョン2.2を使用すると、をinstall:install-file
無視するようlocalRepositoryPath
です。ただし、プラグインのバージョン2.3以降では動作します。したがって、プラグインの完全修飾名を使用してバージョンを指定します。
mvn org.apache.maven.plugins:maven-install-plugin:2.3.1:install-file \
-Dfile=<path-to-file> -DgroupId=<myGroup> \
-DartifactId=<myArtifactId> -Dversion=<myVersion> \
-Dpackaging=<myPackaging> -DlocalRepositoryPath=<path>
最後に、他の依存関係と同様に宣言します(ただしsystem
スコープはありません)。
<dependency>
<groupId>your.group.id</groupId>
<artifactId>3rdparty</artifactId>
<version>X.Y.Z</version>
</dependency>
これはsystem
、依存関係が良き市民のように扱われるため(たとえば、アセンブリに含まれるなど)、スコープを使用するよりも優れたソリューションです。
ここで、企業環境でこの状況に対処するための「正しい方法」(ここではそうではないかもしれません)は、企業リポジトリを使用することになることを述べなければなりません。
basedir/./my-local-repo
シングルで修正しました.
。
system
スコープの使用。${basedir}
あなたのpomのディレクトリです。
<dependency>
<artifactId>..</artifactId>
<groupId>..</groupId>
<scope>system</scope>
<systemPath>${basedir}/lib/dependency.jar</systemPath>
</dependency>
ただし、jarをリポジトリにインストールし、SCMにコミットしないことをお勧めします。結局、それがmavenが排除しようとしていることです。
これは、jarをインストールせずにmaven 2ビルドクラスパスに追加できますか?
特にダウンロードされたJARが親の外の子プロジェクトで参照されている場合、マルチモジュールビルドを使用すると、この制限を回避できます。これにより、ビルドの一部としてPOMおよびSHA1ファイルが作成されるため、セットアップ作業も削減されます。また、名前を修正したり、Mavenリポジトリー構造に従わなくても、ファイルをプロジェクトの任意の場所に置くことができます。
これはmaven-install-pluginを使用します。これを機能させるには、マルチモジュールプロジェクトをセットアップし、ファイルをローカルリポジトリにインストールするビルドを表す新しいプロジェクトを用意して、それが最初であることを確認する必要があります。
マルチモジュールプロジェクトpom.xmlは次のようになります。
<packaging>pom</packaging>
<modules>
<!-- The repository module must be first in order to ensure
that the local repository is populated -->
<module>repository</module>
<module>... other modules ...</module>
</modules>
次に、repository / pom.xmlファイルには、プロジェクトの一部であるJARをロードするための定義が含まれます。以下は、pom.xmlファイルの一部です。
<artifactId>repository</artifactId>
<packaging>pom</packaging>
pomパッケージは、これがテストを実行したり、jarファイルをコンパイルまたは生成したりするのを防ぎます。pom.xmlの主要部分は、maven-install-pluginが使用されるビルドセクションにあります。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<executions>
<execution>
<id>com.ibm.db2:db2jcc</id>
<phase>verify</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<groupId>com.ibm.db2</groupId>
<artifactId>db2jcc</artifactId>
<version>9.0.0</version>
<packaging>jar</packaging>
<file>${basedir}/src/jars/db2jcc.jar</file>
<createChecksum>true</createChecksum>
<generatePom>true</generatePom>
</configuration>
</execution>
<execution>...</execution>
</executions>
</plugin>
</plugins>
</build>
複数のファイルをインストールするには、実行を追加するだけです。
これは私のために働いています:私がこの依存関係を持っているとしましょう
<dependency>
<groupId>com.company.app</groupId>
<artifactId>my-library</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/my-library.jar</systemPath>
</dependency>
次に、このように手動でシステム依存関係のクラスパスを追加します
<Class-Path>libs/my-library-1.0.jar</Class-Path>
完全な設定:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifestEntries>
<Build-Jdk>${jdk.version}</Build-Jdk>
<Implementation-Title>${project.name}</Implementation-Title>
<Implementation-Version>${project.version}</Implementation-Version>
<Specification-Title>${project.name} Library</Specification-Title>
<Specification-Version>${project.version}</Specification-Version>
<Class-Path>libs/my-library-1.0.jar</Class-Path>
</manifestEntries>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.company.app.MainClass</mainClass>
<classpathPrefix>libs/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/libs/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
これを行うためのパターンについては以前に書いたことがあります。
Pascalによって提案されたソリューションと非常に似ていますが、マルチモジュールビルドの場合、依存関係が使用されているすべての場所でその依存関係を繰り返す必要がないように、そのような依存関係をすべて専用のリポジトリモジュールに移動します。
基本的に、これをpom.xmlに追加します。
...
<repositories>
<repository>
<id>lib_id</id>
<url>file://${project.basedir}/lib</url>
</repository>
</repositories>
...
<dependencies>
...
<dependency>
<groupId>com.mylibrary</groupId>
<artifactId>mylibraryname</artifactId>
<version>1.0.0</version>
</dependency>
...
</dependencies>
Pascalが投稿したソリューションへの小さな追加
このルートをたどると、ojdbc jarのインストール中にmavenでエラーが発生しました。
[INFO] --- maven-install-plugin:2.5.1:install-file (default-cli) @ validator ---
[INFO] pom.xml not found in ojdbc14.jar
-DpomFileを追加した後、問題は解決されました。
$ mvn install:install-file -Dfile=./lib/ojdbc14.jar -DgroupId=ojdbc \
-DartifactId=ojdbc -Dversion=14 -Dpackaging=jar -DlocalRepositoryPath=./repo \
-DpomFile=~/.m2/repository/ojdbc/ojdbc/14/ojdbc-14.pom
あなたは日食を使用して実行可能なjarを生成することができます:エクスポート/実行可能なjarファイル
localRepositoryPath
です...