[maven] Maven이 아티팩트를 검색하기 위해 원격 저장소로 이동하는 대신 로컬 저장소를 사용하도록 강제하는 방법은 무엇입니까?

Mac Yosemite에서 Java 8과 함께 Maven 3.3.3을 사용하고 있습니다. 다중 모듈 프로젝트가 있습니다.

    <modules>
            <module>first-module</module>
            <module>my-module</module></modules>

“mvn clean install”을 사용하여 위의 “my-module”과 같은 자식 모듈 중 하나를 빌드 할 때 빌드는 ~ / .m2에 정의한 원격 저장소에서 자식 모듈 아티팩트를 다운로드하려고합니다. /settings.xml 파일. 출력은 다음과 같습니다.

[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building my-module 87.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloading: http://download.java.net/maven/2/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloaded: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml (788 B at 0.9 KB/sec)
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-20151104.200545-4.pom

원격 저장소에서 다운로드를 시도하기 전에 Maven이 내 로컬 ~ / .m2 / repository를 먼저 확인하도록 강제하는 방법은 무엇입니까? 아래는 ~ / .m2 / settings.xml 파일에 정의 된 원격 저장소가있는 곳입니다.

<profile>
    <id>releases</id>
    <activation>
        <property>
            <name>!releases.off</name>
        </property>
    </activation>
    <repositories>
        <repository>
            <id>releases</id>
            <url>https://my.remoterepository.com/nexus/content/repositories/releases/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
</profile>
<profile>
    <id>snapshots</id>
    <activation>
        <property>
            <name>!snapshots.off</name>
        </property>
    </activation>
    <repositories>
        <repository>
            <id>snapshots</id>
            <url>https://my.remoterepository.com/nexus/content/repositories/snapshots/</url>
            <releases>
                <enabled>false</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
</profile>

편집 : 아티팩트가 없을 때 다운로드가 발생한다는 답변에 대한 응답으로 아래는 파일이 내 저장소에 있음을 증명했지만 Maven이 어쨌든 다운로드를 시도하는 터미널 출력입니다 …

Daves-MacBook-Pro-2:my-module davea$ ls -al ~/.m2/repository/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-SNAPSHOT.jar
-rw-r--r--  1 davea  staff  10171 Nov  5 10:22 /Users/davea/.m2/repository/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-SNAPSHOT.jar
Daves-MacBook-Pro-2:my-module davea$ mvn clean install
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for org.mainco.subco:my-module:jar:87.0.0-SNAPSHOT
[WARNING] 'build.plugins.plugin.(groupId:artifactId)' must be unique but found duplicate declaration of plugin org.apache.maven.plugins:maven-antrun-plugin @ org.mainco.subco:my-module:[unknown-version], /Users/davea/Documents/sb_workspace/my-module/pom.xml, line 678, column 12
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building my-module 87.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloading: http://download.java.net/maven/2/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml
Downloaded: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/maven-metadata.xml (788 B at 0.8 KB/sec)
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-module-87.0.0-20151106.043202-8.pom
Downloaded: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/first-module/87.0.0-SNAPSHOT/first-   module-87.0.0-20151106.043202-8.pom (3 KB at 21.9 KB/sec)
Downloading: http://download.java.net/maven/2/org/mainco/subco/subco/87.0.0-SNAPSHOT/maven-metadata.xml
Downloading: https://my.remoterepository.com/nexus/content/repositories/snapshots/org/mainco/subco/subco/87.0.0-SNAPSHOT/maven-metadata.xml



답변

종속성에 스냅 샷 버전이 있습니다. 스냅 샷의 경우 Maven은 로컬 저장소를 확인하고 로컬 저장소에서 발견 된 아티팩트가 너무 오래된 경우 원격 저장소에서 업데이트 된 항목을 찾으려고 시도합니다. 그것은 아마도 당신이보고있는 것입니다.

이 동작은 updatePolicy저장소 구성 의 지시문 ( daily기본적으로 스냅 샷 저장소의 경우)에 의해 제어됩니다 .


답변

사용 mvn --help하면 옵션 목록을 볼 수 있습니다.

다음과 같은 옵션이 있습니다. -nsu,--no-snapshot-updates Suppress SNAPSHOT updates

따라서 명령 mvn install -nsu을 사용하면 로컬 저장소로 강제 컴파일 할 수 있습니다.


답변

maven이 로컬 repo 사용 하도록 강제 하려면 . 는 당신이 “오프라인”작업 할 수 있도록하고, 네트워크를 계속 꺼져 받는다는 알려줍니다.mvn <goals> -o-o


답변

제 경우에는 당신과 같은 다중 모듈 프로젝트가있었습니다. 내 프로젝트가 의존하고있는 외부 라이브러리 중 하나의 그룹 ID를 아래와 같이 변경해야했습니다.

에서:

<dependencyManagement>
    <dependency>
        <groupId>org.thirdparty</groupId>
        <artifactId>calculation-api</artifactId>
        <version>2.0</version>
        <type>jar</type>
        <scope>provided</scope>
    </dependency>
<dependencyManagement>

에:

<dependencyManagement>
   <dependency>
      <groupId>org.thirdparty.module</groupId>
        <artifactId>calculation-api</artifactId>
        <version>2.0</version>
        <type>jar</type>
        <scope>provided</scope>
    </dependency>
<dependencyManagement>

<groupId> 섹션에주의하십시오. pom 파일 에서이 종속성을 정의하는 하위 모듈의 해당 섹션을 수정하는 것을 잊었습니다.

모듈을 로컬에서 사용할 수 있었기 때문에 그것은 나를 매우 미치게 만들었습니다.


답변

아래 단계를 따르십시오.

    1. 보관하려는 jar를 제외하고 로컬에있는 jar 폴더의 모든 내용을 삭제해야합니다.
      예를 들어 .repositories, .pom, .sha1, .lastUpdated 등과 같은 파일.
    1. mvn clean install -o명령 실행

이렇게하면 저장소에 연결하는 대신 로컬 저장소 jar 파일을 사용하는 데 도움이됩니다.


답변

아티팩트가 아직 개발 중이고 아직 업로드되지 않았기 때문에 -o 옵션이 작동하지 않았으며 maven (3.5.x)은 오류에 따라 처음이기 때문에 여전히 원격 저장소에서 다운로드를 시도합니다.

그러나 이것은 나를 위해 수정했습니다 : https://maven.apache.org/general.html#importing-jars

이 수동 설치 후에는 오프라인 옵션도 사용할 필요가 없습니다.

최신 정보

방금 종속성을 다시 작성했고 다시 가져와야했습니다. 일반 파일 mvn clean install이 충분하지 않았습니다.


답변

위의 모든 답변을 고려하더라도 오류로 인해 maven 오프라인 빌드를 종료하는 문제가 발생할 수 있습니다. 특히 다음과 같은 경고가 발생할 수 있습니다.

[WARNING] The POM for org.apache.maven.plugins:maven-resources-plugin:jar:2.6 is missing, no dependency information available

경고는 즉시 추가 오류가 발생하고 maven이 종료됩니다.

위의 힌트에 따라 생성 된 maven 오프라인 캐시로 오프라인을 구축하는 가장 안전한 방법은 다음 maven 오프라인 매개 변수를 사용하는 것입니다.

mvn -o -llr -Dmaven.repo.local=<path_to_your_offline_cache> ...

특히 -llr 옵션 은 답변 # 4에서 제안한대로 로컬 캐시를 조정할 필요가 없도록합니다.

또한 settings.xml의 localRepository 매개 변수가 다음과 같이 설정되어 있는지 확인하십시오.

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