developer tip

명령 줄에 Maven 리포지토리를 추가 할 수 있습니까?

copycodes 2020. 11. 28. 09:40
반응형

명령 줄에 Maven 리포지토리를 추가 할 수 있습니까?


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

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

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


이 작업을 수행 할 수 있지만 다른 사람들이 말한 것처럼 POM에서 수행하는 것이 더 낫습니다.

명령 줄에서 로컬 저장소에 대한 속성과 원격 저장소에 대한 다른 저장소를 지정할 수 있습니다. 원격 저장소에는 모든 기본 설정이 있습니다.

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

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

Maven't Project Object Model (POM)의 목표 중 하나는 아티팩트를 안정적으로 재현하는 데 필요한 모든 정보를 캡처하는 것이므로 아티팩트 생성에 영향을주는 설정을 전달하지 않는 것이 좋습니다.

목표를 달성하려면 각 프로젝트와 함께 사용자 수준 settings.xml 파일을 확인하고 -s (또는 --settings) 옵션을 사용하여 빌드에 전달할 수 있습니다.


명령 줄을 사용하여 할 수 있는지 잘 모르겠습니다. 반면에 다음 예제와 같이 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>

@Jorge Ferreira가 이미 저장소 정의를 pom.xml에 넣었다고 말했듯이. 사용 프로필 명령 줄을 통해 사용할 수있는 저장소를 선택 adittionally :

mvn deploy -P MyRepo2

mvn deploy -P MyRepo1

I'll assume here that you're asking this because you occasionally want to add a new 3rd-party repository to your builds. I may be wrong of course... :)

Your best bet in this case is to use a managed proxy such as artifactory or nexus. Then make a one-time change in settings.xml to set this up as a mirror for the world.

Any 3rd party repos that you need to add from that point on can be handled via the proxy.


I haven't really used maven 2 before, our system is still working on maven 1.x because of some issues with maven 2.

However, looking at the documentation for maven 2 it seems that there aren't any specific System properties like that. However, you could probably build one into your poms/settings using the System properties. See System properties part of this http://maven.apache.org/settings.html

So you'd have ${maven.repository} in your settings file and then use the -Dmaven.repository like you do above.

I am unsure as to if this would work, but with some tweaking I am sure you can come up with something.


Create a POM that has the repository settings that you want and then use a parent element in your project POMs to inherit the additional repositories. The use of an "organization" POM has several other benefits when a group of projects belong to one team.

참고URL : https://stackoverflow.com/questions/71030/can-i-add-maven-repositories-in-the-command-line

반응형