私がMavenを学んだ最初の数日であり、私はまだ基本に苦労しています。プロジェクトで参照する必要がある外部.jarファイル(パブリックリポジトリでは利用不可)があり、最適なオプションを見つけようとしています。
ライブラリの中央リポジトリがない小規模プロジェクトなので、ローカルリポジトリ(何らかの方法でソース管理に追加され、そのように動作するかどうかわからない)または.jarを保存する必要があります正式なリポジトリの外部にあるディスク。
1)プロジェクトとライブラリの両方をソース管理する場合、mavenを使用してプロジェクトの参照に.jarファイルを追加するための最良のオプションは何ですか?
2)Eclipseに依存関係を認識させることはまだできないようです。 pomのセクションに手動で追加しましたが、m2EclipseのDependenciesリストに表示されます。 mvn compileとmvn packageは両方とも成功しますが、プログラムを実行すると次の結果になります。
Exception in thread "main" Java.lang.Error: Unresolved compilation problems:
LibraryStuff cannot be resolved to a type
これは、POMを次のように編集した後です。
<dependency>
<groupId>stuff</groupId>
<artifactId>library</artifactId>
<version>1.0</version>
<systemPath>${lib.location}/MyLibrary.jar</systemPath>
<scope>system</scope>
</dependency>
すでにpom.xmlを上記のように編集したと思っていても、mvn install:install-fileを実行する必要がありますか?
ありがとう!
mvn install:install-file
を使用してローカルリポジトリにライブラリjarを追加する必要があると思います。その後、システムからコンパイルにスコープを変更する必要があります。
Mavenを使用している場合は、IDEプラグインではなく直接Mavenを使用することをお勧めします。これにより、複雑さが増します。
エラーについては、クラスパスに必要なjarを入れていますか?ライブラリのタイプを使用している場合は、ランタイムでも同様にアクセスする必要があります。これは、Maven自体とは関係ありません。
ライブラリをソース管理に配置する理由がわかりません。バイナリjarではなくソースコード用です。
プロジェクトリポジトリに作成できるので、新しいコンピューターで作業するたびにrun mvn install:install-file
を作成する必要はありません
<repository>
<id>in-project</id>
<name>In Project Repo</name>
<url>file://${project.basedir}/libs</url>
</repository>
<dependency>
<groupId>dropbox</groupId>
<artifactId>dropbox-sdk</artifactId>
<version>1.3.1</version>
</dependency>
/groupId/artifactId/version/artifactId-verion.jar
詳細はこのブログ投稿を読んでください
http://charlie.cu.cc/2012/06/how-add-external-libraries-maven/
これは、<dependency>要素内にネストされた<scope>要素を使用して簡単に実現できます。
例えば:
<dependencies>
<dependency>
<groupId>ldapjdk</groupId>
<artifactId>ldapjdk</artifactId>
<scope>system</scope>
<version>1.0</version>
<systemPath>${basedir}\src\lib\ldapjdk.jar</systemPath>
</dependency>
</dependencies>
リファレンス: http://www.tutorialspoint.com/maven/maven_external_dependencies.htm
Mavenマニュアル やること これ:
mvn install:install-file -Dfile=non-maven-proj.jar -DgroupId=some.group -DartifactId=non-maven-proj -Dversion=1 -Dpackaging=jar
更新独自のNexusサーバーをインストールしたばかりで、はるかに簡単でクリーンです。
私たちの会社では、いくつかのjarファイルがありましたが、いくつかのjarファイルは一般的ですが、Mavenリポジトリでホストされておらず、ローカルストレージに保存する必要もありませんでした。 Githubに非常に単純なmvn(パブリック)リポジトリを作成しました(ただし、任意のサーバーまたはローカルでホストできます)。
noteこれはごくまれに管理するのに理想的ですjarファイルの変更
GitHubでリポジトリを作成します。https://github.com/<user_name>/mvn-repo/
Pom.xmlにリポジトリを追加
(フルパスの未加工ファイルはリポジトリ名とは少し異なることに注意してください)
<repository>
<id>project-common</id>
<name>Project Common</name>
<url>https://github.com/<user_name>/mvn-repo/raw/master/</url>
</repository>
ホスト(Githubまたはプライベートサーバー)に依存関係を追加します
a。知っておく必要があるのは、ファイルが@glitchで言及されたパターンで保存されていることだけです/groupId/artifactId/version/artifactId-version.jar
b。ホストで、このパターンに一致するフォルダーを作成します。
つまり、service-sdk-0.0.1.jar
という名前のjarファイルがある場合は、フォルダーservice-sdk/service-sdk/0.0.1/
を作成し、その中にjarファイルservice-sdk-0.0.1.jar
を配置します。
c。ブラウザーからjarをダウンロードしてテストします(この場合:https://github.com/<user_name>/mvn-repo/raw/master/service-sdk/service-sdk/0.0.1/service-sdk-0.0.1.jar
Pom.xmlファイルに依存関係を追加します。
<dependency>
<groupId>service-sdk</groupId>
<artifactId>service-sdk</artifactId>
<version>0.0.1</version>
</dependency>
楽しい
SystemPathを使用しないでください。ここで人々が言ったことに反して、チェックアウトしたプロジェクトディレクトリの下のフォルダーに外部jarを配置し、Mavenが他の依存関係のようにそれを見つけることができます。 2つの重要な手順を次に示します。
それはかなり簡単で、ステップバイステップの例をここで見つけることができます: http://randomizedsort.blogspot.com/2011/10/configuring-maven-to-use-local-library.html =
非Maven jarをMavenプロジェクトに追加するMavenの方法
ビルドセクションにMavenインストールプラグインを追加します
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>${version.maven-install-plugin}</version>
<executions>
<execution>
<id>install-external-non-maven1-jar</id>
<phase>clean</phase>
<configuration>
<repositoryLayout>default</repositoryLayout>
<groupId>jar1.group</groupId>
<artifactId>non-maven1</artifactId>
<version>${version.non-maven1}</version>
<file>${project.basedir}/libs/non-maven1.jar</file>
<packaging>jar</packaging>
<generatePom>true</generatePom>
</configuration>
<goals>
<goal>install-file</goal>
</goals>
</execution>
<execution>
<id>install-external-non-maven2-jar</id>
<phase>clean</phase>
<configuration>
<repositoryLayout>default</repositoryLayout>
<groupId>jar2.group</groupId>
<artifactId>non-maven2</artifactId>
<version>${version.non-maven2}</version>
<file>${project.basedir}/libs/non-maven2.jar</file>
<packaging>jar</packaging>
<generatePom>true</generatePom>
</configuration>
<goals>
<goal>install-file</goal>
</goals>
</execution>
<execution>
<id>install-external-non-maven3-jar</id>
<phase>clean</phase>
<configuration>
<repositoryLayout>default</repositoryLayout>
<groupId>jar3.group</groupId>
<artifactId>non-maven3</artifactId>
<version>${version.non-maven3}</version>
<file>${project.basedir}/libs/non-maven3.jar</file>
<packaging>jar</packaging>
<generatePom>true</generatePom>
</configuration>
<goals>
<goal>install-file</goal>
</goals>
</execution>
</executions>
</plugin>
依存関係を追加
<dependencies>
<dependency>
<groupId>jar1.group</groupId>
<artifactId>non-maven1</artifactId>
<version>${version.non-maven1}</version>
</dependency>
<dependency>
<groupId>jar2.group</groupId>
<artifactId>non-maven2</artifactId>
<version>${version.non-maven2}</version>
</dependency>
<dependency>
<groupId>jar3.group</groupId>
<artifactId>non-maven3</artifactId>
<version>${version.non-maven3}</version>
</dependency>
</dependencies>
参照 注:私はブログの所有者です
同じ問題が発生し、spring-boot v1.4 +を使用している場合は、この方法で実行できます。
includeSystemScopeがあり、これを使用してシステムスコープの依存関係をjarに追加できます。
例えば.
プロジェクトにOracleドライバーを使用しています。
<dependency>
<groupId>com.Oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.3.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/extra-jars/ojdbc14-10.2.0.3.0.jar</systemPath>
</dependency>
次に、includeSystemScope = trueを作成して、jarをパス/ BOOT-INF/lib/**に含めます
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
重複するインクルードを避けるためにリソースから除外します。jarは十分に太っています〜
<build>
<testSourceDirectory>src/test/Java</testSourceDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.jar</exclude>
</excludes>
</resource>
</resources>
</build>
がんばろう!
systemPathを変更します。
<dependency>
<groupId>stuff</groupId>
<artifactId>library</artifactId>
<version>1.0</version>
<systemPath>${project.basedir}/MyLibrary.jar</systemPath>
<scope>system</scope>
</dependency>
を使用するすべての例に注意してください
<repository>...</respository>
アウターが必要
<repositories>...</repositories>
タグを囲みます。いくつかの例からは明らかではありません。
Pom.xmlは、ローカルリポジトリを調べて、アーティファクトに一致する依存関係を見つけようとします。また、実際にシステムスコープまたはsystemPath属性を使用するべきではありません。これらは通常、JREではなくJDKにあるもののために予約されています
Mavenアーティファクトのインストール方法については、これを参照してください question .
ここでの最良の解決策は、NexusまたはArtifactoryのリポジトリをインストールすることです。このようなものを置く場所を提供し、さらに外部からあなたのものをキャッシュすることで物事をスピードアップします。
扱っているものがオープンソースの場合、puttingin centralを検討することもできます。
ガイド を参照してください。
Eclipse Oxygenを使用すると、次のことができます。
Mavenは、プロジェクトのインストール時にそれらを受け取ります。
外部jarがMavenプロジェクトのみによって作成されている場合、システムにプロジェクト全体をコピーして、
mvn install
プロジェクトディレクトリ内。これにより、ローカルMavenリポジトリーである.m2ディレクトリーにjarが追加されます。
今、あなたは追加することができます
<dependency>
<groupId>copy-from-the=maven-pom-of-existing-project</groupId>
<artifactId>copy-from-the=maven-pom-of-existing-project</artifactId>
<version>copy-from-the=maven-pom-of-existing-project</version>
</dependency>
これにより、
mvn exec:Java
動作します。 ここで推奨 を使用する場合
<scope>system</scope>
次に、コマンドラインから実行する際にクラスを個別に追加する必要があります。
次のコマンドで外部jarを追加できます ここで説明
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
-DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>