IT story

Maven 저장소, pom.xml 또는 settings.xml을 지정하는 가장 좋은 장소는 어디입니까?

hot-time 2020. 12. 31. 22:53
반응형

Maven 저장소, pom.xml 또는 settings.xml을 지정하는 가장 좋은 장소는 어디입니까?


어디 받는다는 프로젝트에 필요한 저장소를 지정하는 가장 좋은 장소 pom.xml또는 settings.xml? 각 위치의 장단점은 무엇입니까? 모범 사례는 무엇입니까?

여러 가지 이유로 POM에서 리포지토리를 정의하는 것이 더 나은 것 같습니다.

  • 재현성 : 종속 아티팩트는 POM에 명시 적으로 선언 된 알려진 위치에서 나옵니다. 또한 사용자의 잘못 구성된 저장소로 인해 문제가 발생할 가능성이 적습니다.
  • 이식성 :이 POM은 Maven이 설치된 모든 컴퓨터에 빌드됩니다. 추가 사용자 구성 리포지토리 설정에 대한 추가 요구 사항은 없습니다.
  • 사용 용이성 : 설정하는 구성이 적기 때문에 신규 개발자가 프로젝트를 검색하고 빌드하는 것이 더 쉽습니다.

아마도 단점은 향후 저장소 위치가 변경되면 프록시를 설치하거나 새 저장소 위치를 지정하여 이전 소프트웨어의 패치 릴리스를 릴리스해야한다는 것입니다 (또는 .m2/settings.xml마지막 수단으로 추가 저장소를 항상 제공 할 수 있음). 그러나 이것은 단점이 아니라 릴리스 관리에서 좋은 재현성과 이식성에 필요한 결과로 보입니다.

다른 생각은?


Maven 프로젝트, pom.xml 또는 settings.xml에 필요한 저장소를 지정하는 가장 좋은 위치는 어디입니까? 각 위치의 장단점은 무엇입니까? 모범 사례는 무엇입니까?

pom.xml빌드를 이식 가능하게 유지하기 때문에 프로젝트의 특정 프로젝트에 필요한 리포지토리를 개인적으로 정의합니다 . settings.xml파일은 내 의견으로는 사용자 특정 또는 비밀스러운 용도로만 사용해야합니다. 아니요, 사용자에게 저장소 위치를 추가하도록 요청하면 이것이 적절하게 문서화되어 있어도 어떻게 든 maven의 기능 (투명한 종속성 처리) 중 하나를 무력화하고이 아이디어가 마음에 들지 않습니다.

settings.xml리포지토리를 다루는 데 사용할 수있는 유일한 "좋은"사용 사례 는 기업 리포지토리가 있고 Maven이 공개 리포지토리 대신이 리포지토리를 사용하기를 원할 때입니다. 예를 들어 공용 저장소 대한 연결을 방지 하려면 회사 저장소를 모든 저장소의 미러로 선언합니다.

<settings>
  ...
  <mirrors>
    <mirror>
      <id>proxy-of-entire-earth</id>
      <mirrorOf>*</mirrorOf>
      <name>Maven Repository Manager running on repo.mycompany.com</name>
      <url>http://repo.mycompany.com/proxy</url>
    </mirror>
  </mirrors>
  ...
</settings>

나는 항상 POM에 URL을 넣고 settings.xml에 암호를 넣습니다. settings.xml에 URL을 넣는 경우 URL이 변경되면 사용자가 로컬 시스템에서 파일을 업데이트해야합니다. URL이 POM에 지정된 경우 URL을 변경하고 새 릴리스를 푸시 할 수 있습니다. URL은 대부분이 예측할 수있는 것보다 더 자주 변경되며 빌드가 중단 될 때 사용자를 실망시킵니다.

명백한 이유로 암호는 settings.xml에 보관됩니다. 암호는 버전 관리에 보관되어서는 안됩니다. 원격 저장소에 배포하려면 mvn 배포 기능에 대한 암호가 필요합니다.


settings.xml대신에 저장소 URL을 저장해야하는 세 가지 이유를 알려 드리겠습니다 pom.xml.

  1. spekdrum 은 실제로 우리에게 일어난 일을 언급했습니다.

기업 저장소가 있고 고객을위한 프로젝트를 구축하고 있고 마지막에 소스 코드를 제공해야하는 경우 settings.xml에서 저장소를 더 잘 구성 할 수 있습니다. 프로젝트가 사무실 외부에 구축 될 때마다 Artifactory (또는 이와 유사한)에 도달하는 것을 원하지 않습니다.

  1. Sonatype에있는 사람은 추천 에서 URL을 배치 settings.xml.

  2. 종속성 저장소가 다운되면 (생각해보십시오 java.net) 한 곳에서 URL을 수정하면됩니다. 사용한 경우 pom.xml모든 이전 릴리스가 손상됩니다. pom.xml릴리스 별 고정 버전 을 커밋해야 할 수 있습니다 .

settings.xml보다 많은 작업 에서 URL을 구성하고 pom.xml있습니까? 물론.

더 많은 유연성을 얻습니까? 물론.

다음 settings.xml과 같이 표시되어야합니다.

<settings>
    <profiles>
        <profile>
            <id>mycompany-servers</id>
            <repositories>
                <repository>
                    <id>mycompany-release</id>
                    <url>https://mycompany.com/release/</url>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </repository>
                <repository>
                    <id>mycompany-snapshot</id>
                    <url>https://mycompany.com/snapshot/</url>
                    <releases>
                        <enabled>false</enabled>
                    </releases>
                </repository>
            </repositories>
        </profile>
    </profiles>
    <activeProfiles>
        <activeProfile>mycompany-servers</activeProfile>
    </activeProfiles>
    <servers>
        <server>
            <id>mycompany-release</id>
            <username>your-username</username>
            <password>your-api-key</password>
        </server>
        <server>
             <id>mycompany-snapshot</id>
             <username>your-username</username>
             <password>your-api-key</password>
        </server>
    </servers>
</settings>

ReferenceURL : https://stackoverflow.com/questions/2225535/where-is-the-best-place-to-specify-maven-repositories-pom-xml-or-settings-xml

반응형