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


117

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


インターネットにアクセスできるマシンはありますか?たぶんサーバー?
マルセロ

2
ありますが、そこから開発環境に移動するのは面倒です。

回答:


163

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

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


この回答と併せて、mvnには「コア」プラグイン(コンパイラー)が付属していることを発見しました。したがって、これはmvn installで必要なものを取得できます。

8
また、「mvn dependency:go-offline」を使用して、pom.xmlで参照されるすべての依存関係がローカルリポジトリに存在することを確認することも検討してください。
するThorbjörnRavnアンデルセン

10
残念ながら、mvn dependency:go-offline単にすべてをキャッチするわけではありませ。たとえば、新しい仮想マシン内では、この目標を実行した後でも、プロジェクトでダウンロードする必要があります。この問題も参照してください。
phs

2
私の経験が示すように-oオプションが正しく動作しないこととゴーオフライン目標は、完全なオフラインビルドを可能にするためにはるかに十分であることから:私はここで見つけるソリューションを参照してください:stackoverflow.com/q/43661755/1767316
user1767316

-oにフラグ-llrを追加すると、動作するはずです。
Udo

10

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

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

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

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

内部のアーティファクトに対する不要な(場合によってはセキュリティが重要な)外部リクエストをブロックし、アーティファクトをどこに、誰がデプロイするかを制御します。

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

<?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>

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


LANに接続されたアクセス権のあるマシンはありません。

2
アーティファクトを使用すると、リポジトリ全体をバックアップし、LANにあるPCの1つにそれを復元できます。
マルセロ

7

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

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

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

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

mvn -o clean install -DskipTests=true
mvn -o jetty:run

6

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

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


4

dependency:go-offlineつまり、すべてをキャッシュしていなかったため、残念ながらうまくいきませんでした。POMファイルやその他のファイルには、依存関係が暗黙的に記述されています。

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


3

オフラインにする前に、すべてがローカルリポジトリにあることを確認する必要があります。これはオフラインでの作業中に必要です。作業する予定のプロジェクト/ pomに対して「mvn dependency: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

IntelliJを使用している場合は、[ 設定] -> [ ビルド、実行、デプロイメント] -> [ ビルドツール] -> [ Maven]に移動し、[ オフラインで作業]をオンまたはオフにします。


1
同様に、EclipseはWindow-> Preferences-> Mavenであり、「Offline」をチェックします
Stuart Brock

2

これはうまくいきますか?

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など)を実行する必要がある場合があります。


それは、突堤、tomcatなどのプラグインのような依存関係とプラグインの方が多いようです。私はmaven-compiler-pluginのような内部のmavenプラグインについてもっと心配しています

1
@predhme:このアプローチは、ローカルマシン上のMavenリポジトリにこれらの外出のすべてのために、すべてのプラグインのために動作します
JoseK

2


(ソース:jfrog.com

または

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

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

Mavenリポジトリー・サーバーは、Maven Central(またはより多くの必要なパブリック・リポジトリー)にアクセスするように構成されたプロキシーを持つこともでき、リモート・リポジトリー内の成果物のリストを循環させることができます。


1

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

私が検証できるソリューションには--legacy-local-repository-o(オフライン)オプションではなくmavenオプションの使用と、ディストリビューションリポジトリの代わりにローカルリポジトリの使用が含まれます

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

ここで見つけた解決策を参照してください。


0

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

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


それは、mavenプロジェクト(ant)ではありません。だから私は必要なすべてのライブラリーを持っていますが、特にmaven内部ライブラリーについて疑問に思っていました。maven-plugin-compilerなど。

Antですべての依存関係を処理している場合は、とにかくおそらくMavenメタデータが不足しているため、Mavenは依存関係を取得しません。「Maven internal libs」に関しては、それらをダウンロードする唯一の方法は、pom構造を構築し、インターネットに接続されたコンピューター上で実行することです。「実行する」とは、必ずしも「mvn clean install」だけではなく、使用すると思われるすべてのターゲットを実行することを意味します。
MaDa 2011

0

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


0

新しいプラグインは次の欠点を修正するために登場しましたmvn dependency:go-offline

https://github.com/qaware/go-offline-maven-plugin

それをpomに追加して、を実行しmvn -T1C de.qaware.maven:go-offline-maven-plugin:resolve-dependenciesます。すべての動的依存関係をセットアップすると、(バージョンを更新するまで)mavenは何もダウンロードしようとしません。


-2
<offline> false </offline>

<localRepository>${user.home}/.m2/repository</localRepository>

<offline> true <offline>

<localRepository>${user.home}/.m2/repository</localRepository>

オフラインタグをfalseからtrueに変更します。

オンラインでレポからダウンロードします

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.