2011-04-14 3 views
4

나는 이것이 Maven 모범 사례에 위배된다는 것을 알고 있지만 규칙의 몇 가지 예외 중 하나 일 가능성이 있습니다. - 적어도 대안에 대해 고민하고 있습니다. (하나의 소스에서 여러 Maven 아티팩트를 생성하는 방법

환경은 이것이다 :

  • 우리는
  • 우리는 우리가 플래시를 생성하는 기존의 인터페이스를 기반으로 새로운 프론트 엔드
  • 으로 플래시를 사용하려면 외부 세계에 독점 기술 기반 인터페이스와 기존 응용 프로그램이 cl 엉덩이와 플래시 SWC에서 그들을 패키지는
  • 가 더 어렵게되는 다리 레거시 인터페이스로 플래시 서비스 요청을 (블레이즈 DS를 통해 오는) 우리는 자바 클래스를 생성
  • 레거시 인터페이스를 기반으로 프론트 엔드 개발자에 의해 사용되는 , 우리는 수십 개의 인터페이스 (인터페이스)를 가지고 있기 때문에 각 인터페이스에 대해 자체적으로 POM을 사용하고 싶지는 않으며 사용하지 못하도록하고 싶습니다. 그리고 그것들은 그들의 artifactId 만 다를 것입니다. 대신 각 빌드에 대해 매개 변수화 된 "일반"프로젝트 구조를 사용합니다 (젠킨스). 프로젝트는 만 완전 자동화 된 환경에서 사용됩니다.

먼저이 모든 것을 하나의 "간단한"프로젝트에 넣으려고했습니다.이 프로젝트는 아티팩트가 설치되어야하는 지점까지 작동합니다. 나는 "자바"& "에서 참조를 가지고,

GenericProject 
| 
+-- GenerateSources from legacy interface 
| +-- pom.xml 
| 
+-- Java 
| +-- pom.xml 
| 
+-- SWC 
| +-- pom.xml 
| 
+-- pom.xml 

이러한 접근 방식은 단점이있다 :

내 현재의 접근 방식은 그 자체에 대한 몇 가지 단점이 있습니다 받는다는 참조 13 장, 영감 멀티 모듈 프로젝트 구조 SWC "를 추악하지만 견딜 수있는"GenerateSource "의 내부 구조에 적용합니다.
실제적으로 내 방식이인데, 전체 프로세스를 트리거 한 레거시 인터페이스 인 & 버전의 아티팩트를 얻기 위해 배포 플러그인 &을 크게 조정해야한다는 것입니다. 나는 지금 달리고있다, 그러나 아주 부서지기 위하여 본다.

  • GenerateSources &에게 자바
    • GenerateSources & SWC

    을하지만 이것은 단지 상호 참조와 함께 약간의 두통을 해결합니다 :

    나는이 개 간단한 프로젝트에서 프로젝트를 복제/분할 고려 .

    아론 (Aaron)은 자신의 의견에서 지적했듯이, 나는 그 문제를 분명히 말하고있다.좀 더 실험 후 이 나에게 많은 명확 가지고 : 은 기본적으로 내가/설치

    1. 를 해결
    2. 이름 project.artifactId

    다른 유물을 두 개의 유물 배포하는 두 가지 문제가

    전체 프로세스를 개선하는 제안 사항이 있습니까?

    미리 감사드립니다.

    +0

    질문을 더 간단하고 구체적인 것으로 분리해야한다고 생각합니다. 지금 당장 당신 문제가 뭔지 모르겠습니다. 빌드하는 동안 더 많은 아티팩트를 생성 할 수있는 JAR 플러그인에 대해 알고 있습니까? 최종 산출물의 이름을 지정하는 옵션에 대해 알고 있습니까? "내부 구조에 대한 언급"이란 정확히 무엇을 의미합니까? –

    +0

    안녕하세요 아론, 내 단일 프로젝트 접근 방식에서 "$ {Interface-Name} - $ {Interface-Verion}"project.build.finalName 및 – Thomas

    +0

    [soory, wong key]로 이미 설정했습니다. . .JAR 플러그인에 의해 "Interface-Name-Interface-Version.jar"을 얻을 수있게되었습니다. 그러나 플러그인을 설치하고 배포하는 데에는 목적에 따라 project.artifactId를 사용해야합니다. 또한 스냅 샷과 릴리스 간의 차이점은 $ {Interface-Version} 대신 project.version을 기반으로합니다. – Thomas

    답변

    3

    :

    1. 보조 아티팩트를 연결합니다 build-helper-plugin를 사용하여이/설치를 automaticly 배포 할
    2. 2 ~ 단계 빌드 :

      2.1 해결 된 project.artifactId 01을 포함하는 sed을 통해 pom.xml을 생성하십시오. 당신은 이론적으로 project.artifactId & project.version으로 표현식을 사용할 수 있지만 받는다는가

    를 구축project.version

    2.2 실행은, Maven은 당신이에 대한 경고를 제공합니다. . . 좋은 이유 : 생성 된 아티팩트를 참조하려고하면 Nexus가 "아티펙트 설명자를 읽지 못했습니다." 오류. 저장소에 저장된 pom에 표현식이 해결되지 않았기 때문에 이것이 의심 스럽습니다!

    2

    generate-sources 단계에 첨부하는 작은 Maven 플러그인을 작성해야합니다. 예 (main class)는 maven-annotation-plugin을 참조하십시오.

    출력에는 GenerateSource의 출력에 생성 된 소스가 포함되며 다른 POM에 종속성을 포함하여 이러한 클래스를 소비 할 수 있습니다. 이 아닌 target/에 파일을 만들어야합니다.

    설치/배포의 경우 : 해당 플러그인은 아티팩트를 생성하는 플러그인에서 이름을 가져옵니다. 따라서 속성을 설정하는 방법에 문제가있을 것입니다. 귀하의 경우에는 JAR plugin입니다. 설명서에 예제가있는 방법은 set the name of the default artifact입니다.

    1

    Maven 오버레이를 사용해보십시오.이 오버레이는 여러 웹 응용 프로그램간에 자원을 공유하는 데 사용됩니다. 나는 다음과 같은 실용적인 솔루션에 온 멀티 모듈 접근 방식에 약간의 우회 후

    http://maven.apache.org/plugins/maven-war-plugin/overlays.html

    +0

    링크의 Thx이지만 설명을 이해할 때 오버레이는 내 상황에 적용 할 수없는 war-plugin에만 해당됩니다. – Thomas

    관련 문제