2012-04-05 4 views
5

나는 여러 대상 플랫폼에 구축되어야한다 유물이 있습니다동기화 유물 버전

  • 리눅스 86
  • ARM11

불행하게도 인해

  • 윈도우 86를 크로스 컴파일러가 부족하여 한 번에 모든 버전의 이슈를 생성 할 수는 없습니다. 다른 단어를 사용

    , 목표는이

    • artifact-1.0.0-linux.zip
    • artifact-1.0.0-windows.zip
    • 유물 같은 저장소 뭔가를하는 것입니다 -1.0.0-arm11.zip
    • artifact-1.0.1-linux.zip
    • artifact-1.0.1-windows.zip
    • artifact-1.0.1-arm11.zip
    • ...

    버전이 동기화되어 있습니다. 이 일을 성취하는 방법?

    모든 빌드 후에 릴리스 프로세스가 pom.xml의 버전을 업그레이드한다는 점이 중요합니다. 그래서 다양한 플랫폼에 연속적으로 구축하여 나는

    • artifact-1.0.0-linux.zip
    • artifact-1.0.1-windows.zip에게
    • artifact-1.0.2-arm11.zip을 가진 달성 할 수
    • artifact-1.0.3-linux.zip
    • artifact-1.0.4-windows.zip
    • artifact-1.0.5-arm11.zip
    • ...

    하지만 이것은 내가 찾고있는 것이 아닙니다.

    나는 MVN 자료

    리눅스

    1. 실행 수 : 출시를 준비 : 수행 -DpushChanges = 버전 번호가 증가하지 않습니다 거짓 릴리스로 설정 pushChanges와 거짓

      (SCM에서)

    2. 다음 Windows에서 실행

      ,451,515,

      MVN 자료 : 출시 준비 :

      을 수행 (이 버전 번호를 증가)

    그러나 적절한 순서가 나와있다에 그 책임이 다양한 플랫폼의 분리 프로세스를 트리거 할 수 있습니다. 메이븐이 이걸 도와 줄 방법이 있니?

    의견이 있으십니까?

    감사


    PS. 이것은 모듈로 구성하는 방법에 대한 질문이 아닙니다. 여러 플랫폼에서 단일 아티팩트의 릴리스 프로세스를 동기화하는 방법에 대한 것입니다. 내가 보는 것처럼

  • 답변

    0

    , 당신은 특정 플랫폼을위한 다양한 유물의 출시를 구별 할 linux, windows 또는 arm11 같은 분류 (유물의 파일 이름 접미사)를 사용합니다. 따라서 모듈이 동일한 groupId, 동일한 artifactId, 동일한 version (아마도 공통 부모로부터 상속받은 것)이지만 다른 classifier 인 아티팩트 인 Maven에서 관리하는 다중 모듈 프로젝트를 만들면 원하는 것을 정확하게 얻을 수 있습니다. 이 경우 항상 다중 모듈 POM을 릴리스해야합니다 (일반적으로 해당 모듈의 공통 상위 요소이기도 함) 모든 모듈을 한꺼번에 릴리스 할 수 있습니다.

    mvn release:prepare release:perform -DautoVersionSubmodules

    을하고 그것 뿐이다 : 동일 버전 - 모든 모듈-정책 (꽤 잘 여기 맞는 것 같다) 가정, 당신은 기본적으로 실행할 수 있습니다. artifact-1.0.0-linux.zip, artifact-1.0.0-windows.zip, artifact-1.0.0-arm11.zip 아티팩트가 릴리스됩니다. 다음 개발 버전은 모든 모듈에 대해 1.0.1-SNAPSHOT으로 설정됩니다 (상위로부터의 상속을 통해).

    +0

    하지만 요점은 당신이 리눅스를 사용하고있을 때 윈도우 용 바이너리를 만들 수 없다는 것입니다 (툴 체인 제약 때문에). 따라서 Linux에서 실행될 때 빌드 프로세스가 Windows 바이너리를 만들 수 없습니다. 그 반대. 따라서 모든 플랫폼에 대해 모든 바이너리를 한 번에 만들 수는 없습니다. --- 이것은 모듈로 구성하는 방법에 대한 질문이 아닙니다. 여러 플랫폼에서 단일 아티팩트의 릴리스 프로세스를 동기화하는 방법에 관한 것입니다. –

    +0

    그래, Maven이 원하는대로 자동으로이 작업을 수행하는 것을 도와 줄 수 없다는 점에 유의하십시오. 자신 만의 릴리스 플러그인을 만들고 싶지 않다면 (그리고 얼마 동안). 언급했듯이, 버전을 부딪히지 않고 모든 relesese를 할 수 있고, 마지막에 그것을 전세계에 부딪 치지 만, 이것은 당신이 기억해야만하는 것입니다. 또한 일반적인 버전 관리 (상위 버전에서 상속)를 삭제하고 모든 모듈의 POM에 문자 그대로 버전을 입력 할 수 있습니다. 그러나 이번에는이 프로세스를 제어하고 모든 모듈을 버전과 함께 릴리스하고 모든 모듈을 한 번 릴리스해야합니다. 나는 진짜로 100 % 자동적 인 방법을 볼 수 없다. –

    +0

    나는 항상 짧은 시간에 :) 어쨌든 도움을 주셔서 감사합니다. –

    2

    아직 해결 방법을 찾으셨습니까? 이

    는 넥서스에 출시 된 버전을 배포 할 수 있습니까, 내가

    어쨌든

    :-) 메이븐 싸우는 유일한 사람이 아니에요 알고하는 것이 좋다? 나는이 작업을 할 수 있다고 생각하고있다.

    1 - Windows 컴퓨터에서 "mvn release : prepare release : perform"을 수행하면 artifact-1.0.1-windows.zip을 nexus로 가져와야한다.

    2 - 이슈 -10을 체크 아웃하십시오.1 태그 소스 제어에서

    3 - 리눅스에서 "mvn deploy"하고 arm11 (P : 무엇이든지) - 넥서스에도 -linux.zip 및 -arm11.zip을 가져와야합니다.

    비록, 내가 넥서스 구성 방식에 따라가 ... 당신은 당신의 질문을 저를 도와 당신이 (분류가 서로 다른 경우에도) 같은 GAV

    0

    에 아무것도 재배치하지 것이라고 믿는다 I pushChanges = false 옵션에 대해 몰랐습니다.

    Jenkins을 사용하면 "원격으로 빌드 트리거 (예 : 스크립트)"기능을 사용하여 일련의 maven 릴리스를 수행하는 각 플랫폼에서 작업을 설정할 수 있습니다. 원하는 경우 매개 변수화 된 빌드를 사용하여 빌드 할 버전을 선택할 수 있습니다 (사용하는 경우 다른 플랫폼에서 빌드를 실행하려면 Parameterized Trigger Plugin이 필요합니다).