プロジェクトをビルド可能にするMaven Pomを作成する方法は、リポジトリから取得することなく、直接プロジェクトに固有のjarを含めることができますか?誰もこれを前にやった?
編集:
依存関係jarを含むアセンブリをビルドして実行可能にしたくないので、ビルド可能にしたいのです。したがって、このプロジェクトを持っている人は誰でも、jarがどのリポジトリにも見つからない場合でもビルドできます。
1アプリケーションのクラスパスにそのjarを含めることができます
2特定のjarファイルをmaven reoposにインストールすることができます
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
-DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
可能な解決策は、依存関係をsrc/main/resourcesに配置してからpomに配置することです:
<dependency>
groupId ...
artifactId ...
version ...
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/yourJar.jar</systemPath>
</dependency>
注:システムの依存関係は、結果のjar/warにコピーされません
( mavenを使用して構築されたwarにシステム依存関係を含める方法 を参照)
プロジェクトの下にリポジトリフォルダーを作成します。とりましょう
${project.basedir}/src/main/resources/repo
次に、カスタムjarをこのリポジトリにインストールします。
mvn install:install-file -Dfile=[FILE_PATH] \
-DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] \
-Dpackaging=jar -DlocalRepositoryPath=[REPO_DIR]
最後に、次のリポジトリと依存関係の定義をプロジェクトpom.xmlに追加します。
<repositories>
<repository>
<id>project-repo</id>
<url>file://${project.basedir}/src/main/resources/repo</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>[GROUP]</groupId>
<artifactId>[ARTIFACT]</artifactId>
<version>[VERS]</version>
</dependency>
</dependencies>
以下のようにローカルドライバーから取得できます。
<dependency>
<groupId>sample</groupId>
<artifactId>com.sample</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/yourJar.jar</systemPath>
</dependency>
本当に早くて汚い方法は、ローカルファイルを指すことです:
<dependency>
<groupId>sampleGroupId</groupId>
<artifactId>sampleArtifactId</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>C:\DEV\myfunnylib\yourJar.jar</systemPath>
</dependency>
ただし、これはあなたのマシン上にのみ存在します(明らかに)、共有するためには適切なm2アーカイブ(nexus/artifactory)を使用するのが通常理にかなっています。構造化アーカイブを作成し、pomで「リポジトリ」を設定します:local:
<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>
これを実現する良い方法は、 Sonatype Nexus などのMavenミラーサーバーを使用することです。無料で非常に簡単にセットアップできます(Java Webアプリ)。 Nexusを使用すると、サードパーティと内部アプリをデプロイする機能を備えたプライベート(チーム、企業など)リポジトリを使用でき、同じサーバーの一部として他のMavenリポジトリも登録できます。このように、ローカルのMaven設定は1つのプライベート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-Assembly-plugin を使用して、すべての依存関係を含むjarを作成できます。
Jarをプロジェクトに追加してmaven-Assembly-pluginを台無しにするか、jarをローカルリポジトリに追加します。
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging> -DgeneratePom=true
Where: <path-to-file> the path to the file to load
<group-id> the group that the file should be registered under
<artifact-id> the artifact name for the file
<version> the version of the file
<packaging> the packaging of the file e.g. jar
ここでの「正しい」解決策は、独自のライブラリを独自のリポジトリに追加することだと思います。ライブラリプロジェクト用にpomを作成し、コンパイルされたバージョンをリポジトリに公開します。このリポジトリをメールプロジェクトのリポジトリのリストに追加し、ビルドを実行します。私はそれがあなたのために働くと信じています。