Mavenを使用するには、ある時点でインターネットへの接続が必要ですか?具体的には、コンパイル、クリーニング、パッケージングなどの内部Mavenプラグインを取得することを意味しますか?
Mavenはオフラインモードmvn -o install
で実行できます。もちろん、ローカルリポジトリで利用できないアーティファクトは失敗します。 Mavenは分散リポジトリを前提とはしていませんが、確かによりシームレスになります。そのため、多くのショップでは、中央リポジトリと段階的に同期される内部ミラーを使用しています。
さらに、mvn dependency:go-offline
を使用して、オフラインで作業を開始する前に、すべての依存関係がローカルにインストールされていることを確認できます。
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>
開発マシンのインターネットアクセスに問題があり、一部のアーティファクトが破損したファイルをダウンロードしたか、まったくダウンロードしなかったため、このソリューションを使用しました。それ以来、問題はありません。
これには2つのオプションがあります。
1.)settings.xmlで変更を行い、これを最初のタグに追加します
<localRepository>C:/Users/admin/.m2/repository</localRepository>
2.)オフラインコマンドに-oタグを使用します。
mvn -o clean install -DskipTests=true
mvn -o jetty:run
Mavenには、ローカルリポジトリの依存関係が必要です。それらを取得する最も簡単な方法は、インターネットアクセスを使用することです(または、ここで提供されている他のソリューションを使用するのはより困難です)。
maven-dependency-plugin を dependency:go-offline ゴールと共に使用して、一時的にインターネットにアクセスできるようになっていると仮定します。これにより、プロジェクトのすべての依存関係がローカルリポジトリにダウンロードされます(もちろん、依存関係/プラグインを変更するには、新しいインターネット/中央リポジトリへのアクセスが必要です)。
悲しいことに、
dependency:go-offline
はすべてをキャッシュしなかったため、私にとってはうまくいきませんでした。 POMファイルおよびその他は暗黙的に依存関係に言及しています。
回避策は、settings.xml
を使用して<localRepository>...</localRepository>
ファイル内で、または-Dmaven.repo.local=...
パラメーターを使用してmvn
を実行することにより、ローカルリポジトリの場所を指定することです。初期プロジェクトのビルド後、必要なすべてのアーティファクトをキャッシュする必要があります。その後、Mavenビルドをオフラインモード(mvn -o ...
)で実行しながら、リポジトリの場所を同じ方法で参照できます。
オフラインにする前に、すべてがローカルリポジトリにあることを確認する必要があります。これはオフラインで作業するときに必要です。作業する予定のプロジェクト/ 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にバインドされた「アイデンティティ」を使用して、メタデータ内のダウンロードされたアーティファクトを認識します。
IntelliJを使用している場合は、Preferences->Build、Execution、Deployment->ビルドツール->Mavenおよびチェック/チェック解除オフライン作業。
これはあなたのために働きますか?
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。
または
Sonatype Nexus http://www.sonatype.org/nexus/ またはJFrog Artifactory https://www.jfrog.com/artifactory/ のようなMavenリポジトリサーバーを使用するだけです。
1人の開発者がプロジェクトをビルドした後、次の開発者またはJenkins CIによるビルドはインターネットアクセスを必要としません。
Mavenリポジトリサーバーは、Maven Central(またはより必要なパブリックリポジトリ)にアクセスするようにプロキシを構成することもでき、リモートリポジトリ内のアーティファクトのリストをサイクリングすることもできます。
私の経験では、-oオプションが適切に機能せず、完全なオフラインビルドを可能にするためにオフラインへの移行目標が十分とは言えないことが示されています。
検証できるソリューションには、--legacy-local-repository
(オフライン)オプションではなく-o
mavenオプションの使用とローカルリポジトリの使用配布リポジトリの代わりに
さらに、local-repoのすべてのmaven-metadata-maven2_central.xml
ファイルを、mavenが期待するmaven-metadata.xml
フォームにコピーする必要がありました。
私が見つけた解決策を参照してください こちら 。
質問に直接答える:インターネット接続は必要ありませんが、LANまたはローカルディスク上のリポジトリにアクセスする必要があります(ここに投稿した他の人からのヒントを使用してください)。
プロジェクトが成熟段階にない場合、つまり、POMが頻繁に変更される場合、リポジトリも頻繁に更新する必要があるため、オフラインモードは非常に実用的ではありません。必要なものがすべて揃ったリポジトリのコピーを取得できない場合を除き、どのように知っていますか?通常、リポジトリをゼロから開始し、開発中に徐々に複製されます(別のリポジトリに接続されたコンピューター上)。 repo1.maven.orgパブリックリポジトリのコピーの重量は数百ギガバイトなので、ブルートフォースもお勧めしません。
オフラインで作業する前の準備として、mvn dependency:go-offline
を実行するだけです