web-dev-qa-db-ja.com

オフライン開発用にMavenを構成するにはどうすればよいですか?

Mavenを使用するには、ある時点でインターネットへの接続が必要ですか?具体的には、コンパイル、クリーニング、パッケージングなどの内部Mavenプラグインを取得することを意味しますか?

105
user130532

Mavenはオフラインモードmvn -o installで実行できます。もちろん、ローカルリポジトリで利用できないアーティファクトは失敗します。 Mavenは分散リポジトリを前提とはしていませんが、確かによりシームレスになります。そのため、多くのショップでは、中央リポジトリと段階的に同期される内部ミラーを使用しています。

さらに、mvn dependency:go-offlineを使用して、オフラインで作業を開始する前に、すべての依存関係がローカルにインストールされていることを確認できます。

144
nsfyn55

LANにインターネットにアクセスできるPCがある場合は、ローカルのMavenリポジトリをインストールする必要があります。

Artifactory Open Source をお勧めします。これは私たちの組織で使用しているもので、セットアップは本当に簡単です。

Artifactoryは、ビルドツール(Maven、Ant、Ivy、Gradleなど)と外部の世界との間のプロキシとして機能します。

リモートアーティファクトをキャッシュするため、何度もダウンロードする必要はありません。

内部アーティファクトに対する不要な(場合によってはセキュリティに敏感な)外部要求をブロックし、アーティファクトの展開方法と場所、およびだれによる制御を行います。

Artifactoryをセットアップしたら、開発マシンでMavenのsettings.xmlを変更するだけです。

<?xml version="1.0" encoding="UTF-8"?>
<settings xsi:schemaLocation="http://maven.Apache.org/SETTINGS/1.0.0 http://maven.Apache.org/xsd/settings-1.0.0.xsd" xmlns="http://maven.Apache.org/SETTINGS/1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <mirrors>
    <mirror>
      <mirrorOf>*</mirrorOf>
      <name>repo</name>
      <url>http://maven.yourorganization.com:8081/artifactory/repo</url>
      <id>repo</id>
    </mirror>
  </mirrors>
  <profiles>
    <profile>
      <repositories>
        <repository>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <id>central</id>
          <name>libs-release</name>
          <url>http://maven.yourorganization.com:8081/artifactory/libs-release</url>
        </repository>
        <repository>
          <snapshots />
          <id>snapshots</id>
          <name>libs-snapshot</name>
          <url>http://maven.yourorganization.com:8081/artifactory/libs-snapshot</url>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <id>central</id>
          <name>plugins-release</name>
          <url>http://maven.yourorganization.com:8081/artifactory/plugins-release</url>
        </pluginRepository>
        <pluginRepository>
          <snapshots />
          <id>snapshots</id>
          <name>plugins-snapshot</name>
          <url>http://maven.yourorganization.com:8081/artifactory/plugins-snapshot</url>
        </pluginRepository>
      </pluginRepositories>
      <id>artifactory</id>
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>artifactory</activeProfile>
  </activeProfiles>
</settings>

開発マシンのインターネットアクセスに問題があり、一部のアーティファクトが破損したファイルをダウンロードしたか、まったくダウンロードしなかったため、このソリューションを使用しました。それ以来、問題はありません。

10
Marcelo

これには2つのオプションがあります。

1.)settings.xmlで変更を行い、これを最初のタグに追加します

<localRepository>C:/Users/admin/.m2/repository</localRepository>

2.)オフラインコマンドに-oタグを使用します。

mvn -o clean install -DskipTests=true
mvn -o jetty:run
8
Jyoti Prakash

Mavenには、ローカルリポジトリの依存関係が必要です。それらを取得する最も簡単な方法は、インターネットアクセスを使用することです(または、ここで提供されている他のソリューションを使用するのはより困難です)。

maven-dependency-plugindependency:go-offline ゴールと共に使用して、一時的にインターネットにアクセスできるようになっていると仮定します。これにより、プロジェクトのすべての依存関係がローカルリポジトリにダウンロードされます(もちろん、依存関係/プラグインを変更するには、新しいインターネット/中央リポジトリへのアクセスが必要です)。

6
FrVaBe

悲しいことに、dependency:go-offlineはすべてをキャッシュしなかったため、私にとってはうまくいきませんでした。 POMファイルおよびその他は暗黙的に依存関係に言及しています。

回避策は、settings.xmlを使用して<localRepository>...</localRepository>ファイル内で、または-Dmaven.repo.local=...パラメーターを使用してmvnを実行することにより、ローカルリポジトリの場所を指定することです。初期プロジェクトのビルド後、必要なすべてのアーティファクトをキャッシュする必要があります。その後、Mavenビルドをオフラインモード(mvn -o ...)で実行しながら、リポジトリの場所を同じ方法で参照できます。

4
luka5z

オフラインにする前に、すべてがローカルリポジトリにあることを確認する必要があります。これはオフラインで作業するときに必要です。作業する予定のプロジェクト/ pomに対して「mvndependency:go-offline」を実行すると、これを達成するための労力が軽減されます。

ただし、dependency:go-offlineは「ベアビルド」プラグインのみをダウンロードするため( go-offline/resolve-pluginsはすべてのプラグインの依存関係を解決するわけではありません )。そのため、デプロイ/テスト/サイトプラグイン(および他のプラグイン)とその依存関係をリポジトリにダウンロードする方法を見つける必要があります。

さらにdependency:go-offlineはpomのアーティファクト自体をダウンロードしないため、必要に応じてdependency:copyをコピーする必要があります。

時々-MaDaが書いたように-オフラインでは何が必要なのかわからないため、「十分な」リポジトリを作成するのはかなり不可能です。

とにかく適切に埋められたレポジトリがあれば、オフラインにするためにMavenのsettings.xmlに「<offline> true </ offline>」を追加するだけです。

オフラインになっている間は、レポを埋めるために使用したMavenプロファイル(id)を変更しないでください。 Mavenは、プロファイルIDにバインドされた「アイデンティティ」を使用して、メタデータ内のダウンロードされたアーティファクトを認識します。

3
Eike Pögel

IntelliJを使用している場合は、Preferences->Build、Execution、Deployment->ビルドツール->Mavenおよびチェック/チェック解除オフライン作業

2
heez

これはあなたのために働きますか?

http://jojovedder.blogspot.com/2009/04/running-maven-offline-using-local.html

プラグインリポジトリに追加することを忘れないでください。リポジトリのある場所にURLを指定してください。

<repositories>
    <repository>
        <id>local</id>
        <url>file://D:\mavenrepo</url>
    </repository>
</repositories>
<pluginRepositories>
    <pluginRepository>
        <id>local</id>
        <url>file://D:\mavenrepo</url>
    </pluginRepository>
</pluginRepositories>

そうでない場合は、ローカルサーバーを実行する必要がある場合があります。マシン上のApache。

2
gigadot

または

Sonatype Nexus http://www.sonatype.org/nexus/ またはJFrog Artifactory https://www.jfrog.com/artifactory/ のようなMavenリポジトリサーバーを使用するだけです。

1人の開発者がプロ​​ジェクトをビルドした後、次の開発者またはJenkins CIによるビルドはインターネットアクセスを必要としません。

Mavenリポジトリサーバーは、Maven Central(またはより必要なパブリックリポジトリ)にアクセスするようにプロキシを構成することもでき、リモートリポジトリ内のアーティファクトのリストをサイクリングすることもできます。

2
Paul Verest

私の経験では、-oオプションが適切に機能せず、完全なオフラインビルドを可能にするためにオフラインへの移行目標が十分とは言えないことが示されています。

検証できるソリューションには、--legacy-local-repository(オフライン)オプションではなく-o mavenオプションの使用とローカルリポジトリの使用配布リポジトリの代わりに

さらに、local-repoのすべてのmaven-metadata-maven2_central.xmlファイルを、mavenが期待するmaven-metadata.xmlフォームにコピーする必要がありました。

私が見つけた解決策を参照してください こちら

0
user1767316

質問に直接答える:インターネット接続は必要ありませんが、LANまたはローカルディスク上のリポジトリにアクセスする必要があります(ここに投稿した他の人からのヒントを使用してください)。

プロジェクトが成熟段階にない場合、つまり、POMが頻繁に変更される場合、リポジトリも頻繁に更新する必要があるため、オフラインモードは非常に実用的ではありません。必要なものがすべて揃ったリポジトリのコピーを取得できない場合を除き、どのように知っていますか?通常、リポジトリをゼロから開始し、開発中に徐々に複製されます(別のリポジトリに接続されたコンピューター上)。 repo1.maven.orgパブリックリポジトリのコピーの重量は数百ギガバイトなので、ブルートフォースもお勧めしません。

0
MaDa

オフラインで作業する前の準備として、mvn dependency:go-offlineを実行するだけです

0
msangel