it-swarm-ko.tech

명령 행에 maven 저장소를 추가 할 수 있습니까?

~/.m2/settings.xml에서 종속성을 가져 오기 위해 maven 리포지토리를 추가 할 수 있다는 것을 알고 있습니다. 그러나 다음과 같은 명령 행을 사용하여 저장소를 추가 할 수 있습니까?

mvn install -Dmaven.repository=http://example.com/maven2

내가하고 싶은 이유는 maven을 호출하는 데 사용하는 명령 줄 옵션을 완전히 제어 할 수있는 지속적인 통합 도구를 사용하고 있기 때문에 통합 도구를 실행하는 사용자의 settings.xml을 관리하는 것이 약간 있기 때문입니다. 번거 로움.

62
Sindri Traustason

이 작업을 수행 할 수 있지만 다른 사람들이 말했듯이 POM에서 수행하는 것이 좋습니다.

명령 행에서 로컬 저장소의 특성 및 원격 저장소의 다른 저장소를 지정할 수 있습니다. 원격 저장소에는 모든 기본 설정이 있습니다.

아래 예제는 두 개의 원격 저장소와 사용자 정의 로컬 저장소를 지정합니다.

mvn package -Dmaven.repo.remote=http://www.ibiblio.org/maven/,http://myrepo 
  -Dmaven.repo.local="c:\test\repo"
69
Rich Seller

Maven't Project Object Model (POM)의 목표 중 하나는 아티팩트를 안정적으로 재생하는 데 필요한 모든 정보를 캡처하여 아티팩트 생성에 영향을주는 설정을 강력히 권장하지 않는 것입니다.

목표를 달성하기 위해 각 프로젝트에서 사용자 레벨 settings.xml 파일을 체크인하고 -s (또는 --settings) 옵션을 사용하여 빌드에 전달할 수 있습니다.

6
ddimitrov

명령 줄을 사용하여 수행 할 수 있는지 확실하지 않습니다. 반면 다음 예와 같이 pom.xml에 리포지토리를 추가 할 수 있습니다. 이 방법을 사용하면 ~/.m2/settings.xml 파일을 변경할 필요가 없습니다.

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.Apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
    ...
    <repositories>
            <repository>
                <id>MavenCentral</id>
                <name>Maven repository</name>
                <url>http://repo1.maven.org/maven2</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
...
            <repository>
                <id>Codehaus Snapshots</id>
                <url>http://snapshots.repository.codehaus.org/</url>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
                <releases>
                    <enabled>false</enabled>
                </releases>
            </repository>
        </repositories>

    ...

        <pluginRepositories>
            <pluginRepository>
                <id>Apache.snapshots</id>
                <name>Apache Snapshot Repository</name>
                <url>
                    http://people.Apache.org/repo/m2-snapshot-repository
                </url>
                <releases>
                    <enabled>false</enabled>
                </releases>
            </pluginRepository>
            <pluginRepository>
                <id>Codehaus Snapshots</id>
                <url>http://snapshots.repository.codehaus.org/</url>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
                <releases>
                    <enabled>false</enabled>
                </releases>
            </pluginRepository>
        </pluginRepositories>

    ...

    </project>
5
Jorge Ferreira

여기서는 때때로 새로운 타사 저장소를 빌드에 추가하려고하기 때문에이 질문을하고 있다고 가정합니다. 물론 잘못되었을 수도 있습니다 ... :)

이 경우 가장 좋은 방법은 아티팩트 또는 넥서스와 같은 관리되는 프록시를 사용하는 것입니다. 그런 다음 settings.xml을 한 번 변경하여 월드 미러로 설정하십시오.

해당 시점부터 추가해야하는 타사 저장소는 프록시를 통해 처리 할 수 ​​있습니다.

3
Kevin Wright

@Jorge Ferreira는 이미 저장소 정의를 pom.xml에 넣었습니다. 명령 줄을 통해 사용할 저장소를 선택하려면 profiles 를 사용하십시오.

mvn deploy -P MyRepo2

mvn deploy -P MyRepo1
3
Eduard Wirch

나는 전에 maven 2를 사용하지 않았지만, 우리의 시스템은 maven 2의 일부 문제 때문에 여전히 maven 1.x에서 작동하고 있습니다.

그러나 maven 2의 문서를 보면 이와 같은 특정 시스템 속성이없는 것 같습니다. 그러나 시스템 속성을 사용하여 폼/설정에 빌드 할 수 있습니다. 이것의 시스템 속성 부분을 참조하십시오 http://maven.Apache.org/settings.html

따라서 설정 파일에 $ {maven.repository}가 있고 위와 같이 -Dmaven.repository를 사용하십시오.

이것이 효과가 있는지 확실하지 않지만 약간의 조정으로 뭔가를 생각 해낼 수 있다고 확신합니다.

2
Henry B

원하는 리포지토리 설정이있는 POM을 만든 다음 프로젝트 POM의 부모 요소를 사용하여 추가 리포지토리를 상속하십시오. "조직"POM을 사용하면 프로젝트 그룹이 한 팀에 속할 때 몇 가지 다른 이점이 있습니다.

1
Steve Moyer