web-dev-qa-db-ja.com

独自のライブラリを含むMavenプロジェクトをビルドします

プロジェクトをビルド可能にするMaven Pomを作成する方法は、リポジトリから取得することなく、直接プロジェクトに固有のjarを含めることができますか?誰もこれを前にやった?

編集:

依存関係jarを含むアセンブリをビルドして実行可能にしたくないので、ビルド可能にしたいのです。したがって、このプロジェクトを持っている人は誰でも、jarがどのリポジトリにも見つからない場合でもビルドできます。

39
London

1アプリケーションのクラスパスにそのjarを含めることができます
2特定のjarファイルをmaven reoposにインストールすることができます

mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
    -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
47
Jigar Joshi

可能な解決策は、依存関係を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にシステム依存関係を含める方法 を参照)

35
ant

プロジェクトの下にリポジトリフォルダーを作成します。とりましょう

${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>
19
mostar

Nexus のようなものを実行してみてください。サードパーティのプロプライエタリjarファイルをアップロードし、帯域幅を節約するために他のパブリックリポジトリをプロキシすることができる独自のMavenリポジトリですか。

This には、独自のMavenリポジトリマネージャーを実行する正当な理由もあります。

7
Larry Shatzer

以下のようにローカルドライバーから取得できます。

<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>
7
Alireza Fattahi

本当に早くて汚い方法は、ローカルファイルを指すことです:

<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>
5
fl0w

これを実現する良い方法は、 Sonatype Nexus などのMavenミラーサーバーを使用することです。無料で非常に簡単にセットアップできます(Java Webアプリ)。 Nexusを使用すると、サードパーティと内部アプリをデプロイする機能を備えたプライベート(チーム、企業など)リポジトリを使用でき、同じサーバーの一部として他のMavenリポジトリも登録できます。このように、ローカルのMaven設定は1つのプライベートNexusサーバーのみを参照し、すべての依存関係はそれを使用して解決されます。

3
01es

新しいフォルダーを作成します。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]

同様の質問に対する私の回答 )からコピー

1
Anthony O.

maven-Assembly-plugin を使用して、すべての依存関係を含むjarを作成できます。

1
jvdbogae

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
1

ここでの「正しい」解決策は、独自のライブラリを独自のリポジトリに追加することだと思います。ライブラリプロジェクト用にpomを作成し、コンパイルされたバージョンをリポジトリに公開します。このリポジトリをメールプロジェクトのリポジトリのリストに追加し、ビルドを実行します。私はそれがあなたのために働くと信じています。

1
AlexR