[java] Maven이 매번 maven-metadata.xml을 다운로드하는 이유는 무엇입니까?

다음은 Maven으로 웹 애플리케이션을 빌드하려고 할 때 인터넷 연결이 불안정 할 때 일반적으로 발생하는 오류입니다.

내 질문은 왜 Maven이 이전에 동일한 앱을 빌드 할 때마다 항상 다운로드해야한다는 것입니다.

Maven이 매번 다운로드하게 만드는 내 구성에서 무엇이 잘못되었을 수 있습니까?

다음은 오프라인으로 빌드하려고 할 때 발생하는 오류입니다.

[INFO] ------------------------------------------------------------------------
[INFO] Building mywebapp 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: https://raw.github.com/pagecrumb/mungo/mvn-repo/com/pagecrumb/mungo/0.0.1-SNAPSHOT/maven-metadata.xml

[WARNING] Could not transfer metadata com.mywebapp:mungo:0.0.1-SNAPSHOT/maven-metadata.xml
from/to mungo-mvn-repo (https://raw.github.com/pagecrumb/mungo/mvn-repo/): raw.github.com
[INFO]
[INFO] --- maven-war-plugin:2.1.1:war (default-cli) @ mywebapp ---
[INFO] Packaging webapp
[INFO] Assembling webapp [mywebapp] in [D:\workspace\web\target\mywebapp-1.0-SNAPSHOT]
[INFO] Processing war project
[INFO] Copying webapp resources [D:\workspace\web\src\main\webapp]
[INFO] Webapp assembled in [1237 msecs]
[INFO] Building war: D:\workspace\web\target\mywebapp-1.0-SNAPSHOT.war
[WARNING] Warning: selected war files include a WEB-INF/web.xml which will be ignored
(webxml attribute is missing from war task,
or ignoreWebxml attribute is specified as 'true')
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building com.mywebapp [com.mywebapp] 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-release-plugin/2.1/maven-release-plugin-2.1.pom

[WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-release-plugin:2.1: Plugin org.apache.maven.plugins:maven-release-plugin:2.1 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-release-plugin:jar:2.1
Downloading: http://download.java.net/maven/2/org/apache/maven/plugins/maven-metadata.xml
Downloading: http://download.java.net/maven/2/org/codehaus/mojo/maven-metadata.xml

397/397 B

Downloaded: http://download.java.net/maven/2/org/codehaus/mojo/maven-metadata.xml (397 B at 0.0 KB/sec)
[WARNING] Failure to transfer org.apache.maven.plugins:maven-war-plugin/maven-metadata.xml from http://download.java.net/maven/2 was cached in the local repository, resolution will not be reattempted until the update interval of maven2-repository.dev.java.net has elapsed or updates are forced. Original error: Could not transfer metadata org.apache.maven.plugins:maven-war-plugin/maven-metadata.xml from/to maven2-repository.dev.java.net (http://download.java.net/maven/2): download.java.net
[INFO]
[INFO] --- maven-war-plugin:2.3:war (default-cli) @ mywebapp-build ---
[INFO] Packaging webapp
[INFO] Assembling webapp [mywebapp-build] in [D:\workspace\target\mywebapp-build-0.0.1-SNAPSHOT]
[INFO] Processing war project
[INFO] Webapp assembled in [15 msecs]
[INFO] Building war: D:\workspace\target\mywebapp-build-0.0.1-SNAPSHOT.war
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] mywebapp ..................................... SUCCESS [27.999s]
[INFO] com.mywebapp [com.mywebapp] ..................... FAILURE [1:00.406s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1:41.409s
[INFO] Finished at: Tue May 07 22:13:38 SGT 2013
[INFO] Final Memory: 11M/28M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.3:war
(default-cli) on project mywebapp-build: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode)



답변

요소에 대해 사용자 settings.xml(또는 프로젝트의 상위 또는 회사 상위 POM)를 찾습니다 <repositories>. 아래와 같이 보일 것입니다.

<repositories>
    <repository>
        <id>central</id>
        <url>http://gotoNexus</url>
        <snapshots>
            <enabled>true</enabled>
            <updatePolicy>always</updatePolicy>
        </snapshots>
        <releases>
            <enabled>true</enabled>
            <updatePolicy>daily</updatePolicy>
        </releases>
    </repository>
</repositories>

<updatePolicy>요소에 유의하십시오 . 이 예제는 Maven이 빌드 중에 스냅 샷 아티팩트를 검색해야 할 때마다 Maven에 원격 저장소 (내 경우에는 Nexus, 자체 원격 저장소를 사용하지 않는 경우 Maven Central)에 연락하도록 지시하여 최신 사본이 있는지 확인합니다. 이를 위해 메타 데이터가 필요합니다. 최신 사본이 있으면 Maven이 로컬 저장소로 다운로드합니다.

이 예에서 릴리스의 경우 정책은 daily하루의 첫 번째 빌드 중에 확인하도록되어 있습니다. Maven 설정 문서에never 설명 된대로 유효한 옵션이기도합니다 .

플러그인은 별도로 해결됩니다. 원하는 경우 다른 업데이트 정책을 사용하여 리포지토리를 구성 할 수도 있습니다.

<pluginRepositories>
    <pluginRepository>
        <id>central</id>
        <url>http://gotoNexus</url>
        <snapshots>
            <enabled>true</enabled>
            <updatePolicy>daily</updatePolicy>
        </snapshots>
        <releases>
            <enabled>true</enabled>
            <updatePolicy>never</updatePolicy>
        </releases>
    </pluginRepository>
</pluginRepositories>

다른 누군가가 -o옵션을 언급했습니다 . 이를 사용하면 Maven이 “오프라인”모드로 실행됩니다. 로컬 리포지토리 만 있으며 사용하는 업데이트 정책에 관계없이 아티팩트를 새로 고치기 위해 원격 리포지토리에 연결하지 않습니다.


답변

-o,--offline "Work offline"이를 방지하기 위해 플래그를 사용할 수 있습니다 .

이렇게 :

maven compile -o


답변

플러그인 버전을 지정하지 않았기 때문에 마지막 버전을 얻기 위해 관련 메타 데이터의 다운로드를 트리거한다고 생각합니다.

그렇지 않으면 -o를 사용하여 로컬 리포지토리 사용을 강제하려고 했습니까?


답변

Maven이 어떤 조회를 할 때 아직 연구하지 않았지만 안정적이고 재현 가능한 빌드를 얻으려면 Maven Respositories에 직접 액세스하지 말고 Nexus와 같은 Maven Repository Manager를 사용하는 것이 좋습니다.

설정 파일을 설정하는 방법은 다음과 같습니다.

http://books.sonatype.com/nexus-book/reference/maven-sect-single-group.html

http://maven.apache.org/repository-management.html


답변

Maven은 종속성이 SNAPSHOT 버전에 있고 maven은 저장소의 해당 스냅 샷 버전에 대한 변경 사항을 감지 할 방법이 없기 때문에이를 수행합니다. 아티팩트를 릴리스하고 pom.xml의 버전을 해당 버전으로 변경하면 maven이 더 이상 메타 데이터 파일을 가져 오지 않습니다.


답변