プロジェクトのライブラリソースにローカルjarファイル(まだMavenリポジトリの一部ではない)を直接追加するにはどうすればよいですか?
33 に答える
次のように、ローカルの依存関係を直接追加できます(適切なライブラリが含まれているビルドmavenプロジェクトで説明されています)。
<dependency>
<groupId>com.sample</groupId>
<artifactId>sample</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/Name_Your_JAR.jar</systemPath>
</dependency>
アップデート
新しいリリースでは、この機能は非推奨としてマークされていますが、まだ機能しており、まだ削除されていません(Mavenの起動中にログに警告が表示されるだけです)。このhttps://issues.apache.org/jira/browse/MNG-6523に関する問題がMavenグループで提起されています(この機能が役立つ場合がある理由を参加して説明できます)。この機能が残っていることを願っています!
機能が削除されていない限り、これを使用して、リポジトリに収まらないプロジェクト内の1つのいたずらなjarファイルにのみ依存関係を作成します。この機能が削除された場合、まあ、私が後で選ぶことができるここにたくさんの良い答えがあります!
次のように、JARをローカルのMavenリポジトリー(通常.m2
はホームフォルダー)にインストールします。
mvn install:install-file \
-Dfile=<path-to-file> \
-DgroupId=<group-id> \
-DartifactId=<artifact-id> \
-Dversion=<version> \
-Dpackaging=<packaging> \
-DgeneratePom=true
それぞれが参照する場所:
<path-to-file>
:ロードするファイルへのパス(例:→)c:\kaptcha-2.3.jar
<group-id>
:ファイルを登録するグループeg→com.google.code
<artifact-id>
:ファイルのアーティファクト名例:→kaptcha
<version>
:ファイルのバージョン例:→2.3
<packaging>
:ファイルのパッケージ化例→jar
参照
- Maven FAQ:ローカルリポジトリに入れたいjarがあります。どうすればコピーできますか?
- Mavenインストールプラグインの使用法:
install:install-file
目標
まず、匿名のStack Overflowユーザーにこの回答の功績を認めたいと思います。これまでに同様の回答を見たことがあると思いますが、今は見つかりません。
ローカルJARファイルを依存関係として持つための最良のオプションは、ローカルMavenリポジトリーを作成することです。このようなリポジトリは、pomファイルを含む適切なディレクトリ構造にすぎません。
私の例では、マスタープロジェクトが${master_project}
ロケーションにあり、サブプロジェクト1がにあり${master_project}/${subproject1}
ます。
次に、Mavenリポジトリを次の場所に作成します
${master_project}/local-maven-repo
。
にあるsubproject1のpomファイルで${master_project}/${subproject1}/pom.xml
、URLパラメータとしてファイルパスをとるリポジトリを指定する必要があります。
<repositories>
<repository>
<id>local-maven-repo</id>
<url>file:///${project.parent.basedir}/local-maven-repo</url>
</repository>
</repositories>
依存関係は、他のリポジトリと同様に指定できます。これにより、pomリポジトリが独立します。たとえば、目的のJARがMaven Centralで使用可能になったら、ローカルリポジトリから削除するだけで、デフォルトのリポジトリからプルされます。
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.servicebinder</artifactId>
<version>0.9.0-SNAPSHOT</version>
</dependency>
最後に重要なことは、次のように-DlocalRepositoryPathスイッチを使用してJARファイルをローカルリポジトリに追加することです。
mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file \
-Dfile=/some/path/on/my/local/filesystem/felix/servicebinder/target/org.apache.felix.servicebinder-0.9.0-SNAPSHOT.jar \
-DgroupId=org.apache.felix -DartifactId=org.apache.felix.servicebinder \
-Dversion=0.9.0-SNAPSHOT -Dpackaging=jar \
-DlocalRepositoryPath=${master_project}/local-maven-repo
JARファイルがインストールされると、Mavenリポジトリをコードリポジトリにコミットでき、セットアップ全体がシステムに依存しなくなります。(GitHubでの作業例)。
JARをソースコードリポジトリにコミットすることは良い習慣ではないことに同意しますが、実際には、公開できない1つのJARをホストするために、本格的なNexusリポジトリよりも迅速でダーティなソリューションの方が優れている場合があります。
local-maven-repo
たとえば、Mavenプロジェクトのルートに新しいフォルダーを作成します。
<project>
あなたの中にローカルリポジトリを追加するだけpom.xml
です:
<repositories>
<repository>
<id>local-maven-repo</id>
<url>file:///${project.basedir}/local-maven-repo</url>
</repository>
</repositories>
次に、インストールする外部jarごとに、プロジェクトのルートに移動して実行します。
mvn deploy:deploy-file -DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=[FILE_PATH]
私はそのような解決策maven-install-plugin
が欲しいです-pomファイルで使用してください:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<file>lib/yourJar.jar</file>
<groupId>com.somegroup.id</groupId>
<artifactId>artefact-id</artifactId>
<version>x.y.z</version>
<packaging>jar</packaging>
</configuration>
</execution>
</executions>
</plugin>
この場合、実行できmvn initialize
、jarはローカルのMavenリポジトリにインストールされます。<dependency></dependency>
これで、このjarは、このマシンの任意のMavenステップで使用できます(タグ付きのpomに他のMaven依存関係としてこの依存関係を含めることを忘れないでください)。jar installをinitialize
ステップではなく、他の任意のステップにバインドすることもできます。
本当に速くて汚い方法はローカルファイルを指すことです、「システム」は今では非推奨になっていることに注意してください:
<dependency>
<groupId>com.sample</groupId>
<artifactId>samplifact</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>C:\DEV\myfunnylib\yourJar.jar</systemPath>
</dependency>
ただし、これは(明らかに)マシン上でのみ有効です。共有するには、通常、適切なm2アーカイブ(nexus / artifactory)を使用するか、これらのアーカイブがないか、ローカルMavenをセットアップしたくない場合に意味があります。構造化されたアーカイブを作成し、pomに「リポジトリ」を構成します。
ローカル:
<repositories>
<repository>
<id>my-local-repo</id>
<url>file://C:/DEV//mymvnrepo</url>
</repository>
</repositories>
リモート:
<repositories>
<repository>
<id>my-remote-repo</id>
<url>http://192.168.0.1/whatever/mavenserver/youwant/repo</url>
</repository>
</repositories>
このソリューションでは、basedir変数を使用して相対パスも可能です。
<url>file:${basedir}</url>
<dependency>
<groupId>group id name</groupId>
<artifactId>artifact name</artifactId>
<version>version number</version>
<scope>system</scope>
<systemPath>jar location</systemPath>
</dependency>
依存関係の重要な部分は次のとおりです。 ${pom.basedir}($ {basedir}だけでなく)
<dependency>
<groupId>org.example</groupId>
<artifactId>example</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${pom.basedir}/src/lib/example.jar</systemPath>
</dependency>
POMファイルに独自のローカルJARを追加し、それをMavenビルドで使用します。
mvn install:install-file -Dfile=path-to-jar -DgroupId=owngroupid -DartifactId=ownartifactid -Dversion=ownversion -Dpackaging=jar
例えば:
mvn install:install-file -Dfile=path-to-jar -DgroupId=com.decompiler -DartifactId=jd-core-java -Dversion=1.2 -Dpackaging=jar
次に、次のようにPOMに追加します。
ステップ1:maven-install-plugin
目標を設定install-file
してpom.xml
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<executions>
<execution>
<id>install-external-non-maven-jar-MWS-Client-into-local-maven-repo</id>
<phase>clean</phase>
<configuration>
<repositoryLayout>default</repositoryLayout>
<groupId>com.amazonservices.mws</groupId>
<artifactId>mws-client</artifactId>
<version>1.0</version>
<file>${project.basedir}/lib/MWSClientJavaRuntime-1.0.jar</file>
<packaging>jar</packaging>
<generatePom>true</generatePom>
</configuration>
<goals>
<goal>install-file</goal>
</goals>
</execution>
</executions>
</plugin>
file
実際のファイルパスに基づいてパスを編集してください(たとえば、これらの外部の非Maven jarをいくつかのフォルダー内に配置し、プロジェクト固有の相対パスを使用してシステムの追加を回避するために、lib
このフォルダーをプロジェクト内に配置することをお勧めしますlib
特定の絶対パス。
複数の外部jarがある場合は<execution>
、同じ内の他のjarに対してを繰り返しますmaven-install-plugin
。
ステップ2:maven-install-plugin
ファイルで上記のように構成したら、通常どおりpom.xml
これらのjarを使用する必要があります。pom.xml
<dependency>
<groupId>com.amazonservices.mws</groupId>
<artifactId>mws-client</artifactId>
<version>1.0</version>
</dependency>
maven-install-plugin
外部jarをローカルの.m2
Mavenリポジトリにコピーするだけであることに注意してください。それでおしまい。プロジェクトへのMaven依存関係としてこれらのjarが自動的に含まれることはありません。
マイナーな点ですが、見逃しやすいこともあります。
1つの方法は、それを独自のMavenリポジトリマネージャー(Nexusなど)にアップロードすることです。とにかく、独自のリポジトリマネージャを用意することをお勧めします。
私が最近見たもう1つの優れた方法は、ビルドライフサイクルにMavenインストールプラグインを含めることです。POMで宣言して、ファイルをローカルリポジトリにインストールします。これは少しですが小さなオーバーヘッドであり、手動の手順は必要ありません。
http://maven.apache.org/plugins/maven-install-plugin/install-file-mojo.html
もちろん、そのフォルダにjarファイルを追加することもできます。しかし、多分それはあなたが達成したいことではありません...
コンパイルにこれらのjarが必要な場合は、次の関連する質問を確認してください。jarをインストールせずにmaven 2ビルドクラスパスに追加できますか?
また、誰かがそれを提案する前に、システムスコープを使用しないでください。
もう1つの興味深いケースは、プロジェクトにプライベートMavenjarを入れたい場合です。推移的な依存関係を解決するために、Mavenの機能を維持することをお勧めします。解決策はかなり簡単です。
- プロジェクトにフォルダlibsを作成します
pom.xmlファイルに次の行を追加します
<properties><local.repository.folder>${pom.basedir}/libs/</local.repository.folder> </properties> <repositories> <repository> <id>local-maven-repository</id> <url>file://${local.repository.folder}</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories>
.m2 / repositoryフォルダーを開き、インポートするプロジェクトのディレクトリー構造をlibsフォルダーにコピーします。
たとえば、依存関係をインポートするとします
<dependency>
<groupId>com.mycompany.myproject</groupId>
<artifactId>myproject</artifactId>
<version>1.2.3</version>
</dependency>
.m2 / repositoryに進むと、次のフォルダーが表示されます。
com / mycompany / myproject / 1.2.3
libsフォルダー内のすべてをコピーし(ここでも、.m2 / repositoryの下のフォルダーを含む)、完了です。
コマンドライン :
mvn install:install-file -Dfile=c:\kaptcha-{version}.jar -DgroupId=com.google.code
-DartifactId=kaptcha -Dversion={version} -Dpackaging=jar
jar
ローカルライブラリとそのライブラリをsources
Mavenjavadoc
プロジェクトに追加します
jar
ライブラリ、their、sources
およびを含むプリコンパイル済みファイルがある場合は、次のようにローカルのMavenリポジトリにファイルを追加javadoc
できます。install
mvn install:install-file -Dfile = awesomeapp-1.0.1.jar \ -DpomFile = awesomeapp-1.0.1.pom \ -Dsources = awesomeapp-1.0.1-sources.jar \ -Djavadoc = awesomeapp-1.0.1-javadoc.jar \ -DgroupId = com.example \ -DartifactId = awesomeapp \ -Dversion = 1.0.1 \ -Dpackaging = jar
次に、プロジェクトで次のライブラリを使用できます。
<!-- com.example -->
<dependency>
<groupId>com.example</groupId>
<artifactId>awesomeapp</artifactId>
<version>1.0.1</version>
</dependency>
maven-install-pluginの使用法を参照してください。
または、build
これらのライブラリを自分でsources
使用javadoc
して、 maven-source-pluginとmaven-javadoc-pluginを使用してから、それらを使用することもできinstall
ます。
プロジェクト例:ライブラリ
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<url>https://example.com/awesomeapp</url>
<groupId>com.example</groupId>
<artifactId>awesomeapp</artifactId>
<name>awesomeapp</name>
<version>1.0.1</version>
<packaging>jar</packaging>
<properties>
<java.version>12</java.version>
</properties>
<build>
<finalName>awesomeapp</finalName>
<defaultGoal>install</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<inherited>true</inherited>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals><goal>jar</goal></goals>
</execution>
</executions>
</plugin>
<plugin>
<inherited>true</inherited>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals><goal>jar</goal></goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Maveninstall
の目標を実行します。
mvn install
ローカルのMavenリポジトリを確認します。
~/.m2/repository/com/example/awesomeapp/1.0.1/
├─ _remote.repositories
├─ awesomeapp-1.0.1.jar
├─ awesomeapp-1.0.1.pom
├─ awesomeapp-1.0.1-javadoc.jar
└─ awesomeapp-1.0.1-sources.jar
次に、このライブラリを使用できます。
<!-- com.example -->
<dependency>
<groupId>com.example</groupId>
<artifactId>awesomeapp</artifactId>
<version>1.0.1</version>
</dependency>
この問題のより良い解決策は、 maven-install-pluginを使用して、インストール時にファイルを自動的にインストールすることだと思います。これが私のプロジェクト用に設定した方法です。
まず、パス(ローカルの.jarを格納する場所)をプロパティとして追加します。
<properties>
<local.sdk>/path/to/jar</local.sdk>
</properties>
次に、plugins
コンパイル時にjarをインストールするプラグインを追加します。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<executions>
<execution>
<id>1</id>
<phase>initialize</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<groupId>com.local.jar</groupId>
<artifactId>appengine-api</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<file>${local.sdk}/lib/impl/appengine-api.jar</file>
</configuration>
</execution>
<execution>
<id>appengine-api-stubs</id>
<phase>initialize</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<groupId>com.local.jar</groupId>
<artifactId>appengine-api-stubs</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<file>${local.sdk}/lib/impl/appengine-api-stubs.jar</file>
</configuration>
</execution>
</executions>
</plugin>
最後に、依存関係では、jarを追加できます
<dependency>
<groupId>com.local.jar</groupId>
<artifactId>appengine-api</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>com.local.jar</groupId>
<artifactId>appengine-api-stubs</artifactId>
<version>1.0</version>
<scope>test</scope>
</dependency>
このようにプロジェクトを設定することにより、プロジェクトを別のコンピューターに持って行っても、プロジェクトはビルドを継続します(プロパティで指定されたパスにすべてのjarファイルがある場合local.sdk
)。
groupId
競合がないことを確認するためだけに一意の名前を使用します。
これで、あなたmvn install
またはmvn test
ローカルjarが自動的に追加されます。
これは、新しいバージョンの短い構文です。
mvn install:install-file -Dfile=<path-to-file>
これは、JARがApacheMavenによってビルドされたときに機能します。これは最も一般的なケースです。次に、META-INFディレクトリのサブフォルダにpom.xmlが含まれます。これは、デフォルトで読み取られます。
ソース: http: //maven.apache.org/guides/mini/guide-3rd-party-jars-local.html
推奨される方法は、独自のリモートリポジトリを作成することです。
方法の詳細については、こちらをご覧ください。「リモートリポジトリへのアップロード」セクションをご覧ください。
jarファイルでいっぱいのフォルダをアップロードできるコードを共有したいと思います。プロバイダーにパブリックリポジトリがなく、手動で多数のライブラリを追加する必要がある場合に便利です。メモリ不足エラーの可能性があるため、Mavenを直接呼び出す代わりに.batを作成することにしました。これはWindows環境用に準備されていますが、LinuxOSに簡単に適合させることができます。
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.jar.Manifest;
public class CreateMavenRepoApp {
private static final String OCB_PLUGIN_FOLDER = "C://your_folder_with_jars";
public static void main(String[] args) throws IOException {
File directory = new File();
//get all the files from a directory
PrintWriter writer = new PrintWriter("update_repo_maven.bat", "UTF-8");
writer.println("rem "+ new Date());
File[] fList = directory.listFiles();
for (File file : fList){
if (file.isFile()){
String absolutePath = file.getAbsolutePath() ;
Manifest m = new JarFile(absolutePath).getManifest();
Attributes attributes = m.getMainAttributes();
String symbolicName = attributes.getValue("Bundle-SymbolicName");
if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject")) {
String[] parts =symbolicName.split("\\.");
String artifactId = parts[parts.length-1];
String groupId = symbolicName.substring(0,symbolicName.length()-artifactId.length()-1);
String version = attributes.getValue("Bundle-Version");
String mavenLine= "call mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -Dfile="+ absolutePath+" -DgroupId="+ groupId+" -DartifactId="+ artifactId+" -Dversion="+ version+" -Dpackaging=jar ";
writer.println(mavenLine);
}
}
}
writer.close();
}
}
このメインを任意のIDEから実行した後、update_repo_maven.batを実行します。
また、見てください...
<scope>compile</scope>
Mavenの依存関係。これはデフォルトですが、場合によっては、ローカルリポジトリ内のローカルライブラリを検索するためにそのスコープもMavenに明示的に設定していることがわかりました。
サードパーティのjarをインストールするには、次のようなコマンドを呼び出してください
mvn install:install-file -DgroupId= -DartifactId= -Dversion= -Dpackaging=jar -Dfile=path
何らかの理由で、私がメンテナンスを行っているWebアプリケーションでは、AlirezaFattahiのソリューションもJJRomanのソリューションも正しく機能しませんでした。どちらの場合も、コンパイルは問題ありませんが(jarが表示されます)、パッケージには戦争内にjarが含まれていません。
私がそれを機能させることができた唯一の方法は、瓶を置き、/src/main/webapp/WEB-INF/lib/
それをFattahisまたはRomanの解決策と組み合わせることでした。
ローカルリポジトリを使用することは必ずしも良い考えではないことに注意してください。このプロジェクトを他の人と共有すると、他の人はそれが機能しないときに問題や質問が発生し、ソース管理システムでもjarを使用できなくなります。
共有リポジトリが最良の答えですが、何らかの理由でこれを行うことができない場合は、jarを埋め込む方がローカルリポジトリよりも優れています。ローカルのみのリポジトリコンテンツは、特に時間の経過とともに多くの問題を引き起こす可能性があります。
ローカルリポジトリで、コマンドを発行してjarをインストールできます
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
-DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
mkyoungのウェブサイトから同じことを行うには、この便利な リンクをたどってください。同じことについてMavenガイドを確認することもできます
- mvnインストール
以下のコードをコマンドラインで記述できます。または、Eclipse組み込みMavenを使用している場合は、プロジェクトを右クリック->実行->構成を実行...->左パネルでMavenビルドを右クリック->新しい構成->書き込み目標とベースディレクトリのコード:$ {project_loc:NameOfYourProject}->実行
mvn install:install-file
-Dfile=<path-to-file>
-DgroupId=<group-id>
-DartifactId=<artifact-id>
-Dversion=<version>
-Dpackaging=<packaging>
-DgeneratePom=true
それぞれが参照する場所:
<path-to-file>:ロードするファイルへのパス(例:-> c:\ kaptcha-2.3.jar)
<group-id>:ファイルを登録する必要のあるグループ(例:-> com.google.code)
<artifact-id>:ファイルのアーティファクト名(例:-> kaptcha)
<バージョン>:ファイルのバージョン(例:-> 2.3)
<パッケージ化>:ファイルのパッケージ化(例:-> jar)
2.インストール後、pom.xmlでjarを宣言するだけです。
<dependency>
<groupId>com.google.code</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3</version>
</dependency>
- ローカルのMavenリポジトリディレクトリを作成します。プロジェクトルートは、最初は次のようになります。
yourproject
+- pom.xml
+- src
- グループcom.exampleおよびバージョン1.0のrepoという標準のMavenリポジトリディレクトリを追加します。
yourproject
+- pom.xml
+- src
+- repo
- アーティファクトをリポジトリにデプロイすると、Mavenはmvn deploy:deploy-fileゴールを使用してアーティファクトをデプロイできます。
mvn deploy:deploy-file -Durl=file:///pathtoyour/repo -Dfile=your.jar -DgroupId=your.group.id -DartifactId=yourid -Dpackaging=jar -Dversion=1.0
- jarに対応するpomファイルをインストールして、プロジェクトがローカルリポジトリからのMavenビルド中にjarを見つけられるようにします。
mvn install:install-file -Dfile=/path-to-your-jar-1.0.jar -DpomFile=/path-to-your-pom-1.0.pom
- pomファイルにリポジトリを追加します。
<repositories>
<!--other repositories if any-->
<repository>
<id>project.local</id>
<name>project</name>
<url>file:${project.basedir}/repo</url>
</repository>
</repositories>
- pomに依存関係を追加します。
<dependency>
<groupId>com.groupid</groupId>
<artifactId>myid</artifactId>
<version>1.0</version>
</dependency>
おそらく誰かが興味を持っているでしょう: https ://github.com/Limraj/maven-artifact-generator
ローカルリポジトリにMavenアーティファクトを生成し、jarへのパスに基づいてpom.xmlの依存関係を構成するコンソールプログラム。これは1つのファイルに対して実行できますが、複数のjarファイルがある場合に最も役立ちます。
パスjar:java -jar maven-artifact-generator-XXXjar -p path_to_jars -g com.test -V 1.2.3 -P jar
jar:java -jar maven-artifact-generator-XXXjar -f file_jar -g com.test -V 1.2.3 -P jar
これにより、ローカルのMavenリポジトリにアーティファクトが生成され、gen.logにpom.xmlの依存関係が生成されます。ArtifactIdは、jarファイルの名前です。
Mavenがインストールされている必要があります。widnows7およびmacOSX(unix / linux)でのテスト。
pom.xmlの一連の依存関係に対して同じエラーが発生しましたが、依存関係のバージョンがpom.xmlで指定されておらず、親リポジトリに記載されていたことがわかりました。何らかの理由で、バージョンの詳細がこのリポジトリと同期していませんでした。したがって、タグを使用して手動でバージョンを入力しましたが、それは魅力のように機能しました。親のバージョンを検索してここで指定するには、少し時間が必要です。ただし、これは、artifactidエラーを示しているjarに対してのみ実行でき、機能します。これが誰かを助けることを願っています。
Apache Maven 3.5.4では、二重引用符を追加する必要がありました。二重引用符がないと、うまくいきませんでした。
例:mvn install:install-file "-Dfile =jarファイルへの場所""-DgroupId = group id" "-DartifactId = Artifact id" "-Dversion = version" "-Dpackaging = package type"
元の質問への回答ではありませんが、誰かにとって役立つかもしれません
Mavenを使用してフォルダーから複数のjarライブラリを追加する適切な方法はありません。依存関係が少ない場合はmaven-install-plugin
、上記の回答に記載されているように構成する方がおそらく簡単です。
ただし、私の特定のケースでは、lib
100を超える独自のjarファイルを含むフォルダーがあり、何らかの方法で追加する必要がありました。そして私にとっては、Maven
プロジェクトをに変換する方がはるかに簡単でしたGradle
。
plugins {
id 'org.springframework.boot' version '2.2.2.RELEASE'
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
flatDir {
dirs 'libs' // local libs folder
}
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
implementation 'io.grpc:grpc-netty-shaded:1.29.0'
implementation 'io.grpc:grpc-protobuf:1.29.0'
implementation 'io.grpc:grpc-stub:1.29.0' // dependecies from maven central
implementation name: 'akka-actor_2.12-2.6.1' // dependecies from lib folder
implementation name: 'akka-protobuf-v3_2.12-2.6.1'
implementation name: 'akka-stream_2.12-2.6.1'
}
シェーディングされたjarファイルには、AlirezaFattahiのソリューションを使用したサードパーティのライブラリが含まれていませんでした。ただし、前回同じプロジェクトで試したところ、動作していたことを覚えています。だから、私は自分の解決策を試しました:
- mkdir .m2 / repositoryディレクトリの下のプロジェクトのパス(そのディレクトリにある他のMaven依存関係ディレクトリと同様)
- サードパーティのjarファイルをその中に入れます。
- Mavenリポジトリのライブラリと同じように依存関係を追加します。
最後に、それは私のために働いた。:)
私の場合、既存のMavenビルドはすでに問題のjarファイルをローカルリポジトリにインストールしていることがわかりましたが、ローカルビルドは接尾辞「-SNAPSHOT」を含むアーティファクトを生成するため、期待される結果は表示されませんでした。私にとって非常に簡単な解決策は、ローカルでビルドされたjarファイルを使用するプロジェクトのpom.xmlファイルを名前と一致するように更新することでした。
<myproject.foo.version>1.88-SNAPSHOT</myproject.foo.version>
それ以外の
<myproject.foo.version>1.88</myproject.foo.version>
要点は、jarファイルがすでにローカルの.m2 / mavenリポジトリにあると思われる場合は、その可能性が非常に高いため、それに応じて依存関係を更新する必要があるということです。
Spring開発者の場合、Spring Bootビルドから作成したJARは、別のビルドでは依存関係JARとして機能しないことがわかります。POMにこれがあるかどうかを確認します。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
mvn package
また、ディレクトリに.jarだけでなく.jar.originalファイルも表示されるかどうかを実行するかどうかも確認してくださいtarget/
。その場合は、その.jar.originalファイルをローカル開発に使用する必要があります(lib /などに配置します)。
もちろん、これを回避することができます。Springのプラグインマニュアルを参照している元の投稿を参照してください。が必要になると思い<configuration> <attach>false</attach> <configuration>
ます。次にデプロイする必要があり、Mavenは.jar.originalファイルを使用する必要があります。私はこれを自分で試したことがないので、知らせてください!