문제

나는 이것을 처음으로 말할 것입니다 : 나는 Maven의 새로운 브랜드입니다.그게 내가 주변을 수색했지만 다음 질문에 대한 답변을 찾지 못했다.이 시나리오가 아니라 비슷한 질문에 대한 답변을 찾았습니다.또는 어쩌면 나는 그 답변을 오해하고 이것은 다중 모듈 설정을 단순히 해결할 수 있습니다.

다음과 같은 종속성 계층 구조가 있습니다.

database
|  |
|  +---core
|      |  |
|      |  +---business 
|      |        |
|      |        +------App1
|      |        |
|      |        +------App2
|      |
|      +---------------App3
|
+----------------------App4
.

변경 사항을 작성하여 변경되도록 "업스트림"모듈 / 앱의 새 릴리스 만 발생합니다.이것은 실제로 다중 모듈 maven 설정의 간단한 사례입니까 아니면 다른 일을해야합니까?

도움이 되었습니까?

해결책

하나의 구성 요소를 해제하려면 각 프로젝트의 새 릴리스를 생성하려면 : http://maven.apache.org/maven-release/maven-release-plugin/ .

문서

의 문서에 따라 다음과 같습니다.

  • 소스의 커밋되지 않은 변경 사항이 없는지 확인
  • 스냅 샷 종속성이 없는지 확인
  • X-Snapshot에서 새 버전으로 POM의 버전을 변경합니다 (사용할 버전을 사용할 수 있음)
  • 태그의 최종 목적지를 포함하도록 POM의 SCM 정보를 변환하십시오.
  • 모든 작업이 작업 순서로 확인하려면 수정 된 POMS에 대한 프로젝트 테스트를 실행합니다.
  • 수정 된 POMS
  • 커밋
  • 버전 이름으로 SCM의 코드를 태그 (이 메시지가 표시됩니다)
  • POM의 버전을 새 값 y- 스냅 샷으로 충돌합니다 (이 값은 프롬프트가 표시됩니다)
  • 수정 된 POMS
  • 커밋

Maven Multi Module 구조로 인해 함께 연결되어 있으며 각 프로젝트는 새로운 릴리스로 부딪 힐 것입니다.

몇 마디로, 이것은 다음과 같습니다 :

  • 이동 버전 1.0 스냅 샷 -> 1.1-snapshot
  • 태그 1.0
  • 1.0.jar 생성 (OU 전쟁 또는 다른 것)

플러그인 사용량

SCM이 올바르게 정의되고 저장소 및 배포 관리가 구성되었다고 가정하면 다음 줄을 추가하십시오

<project>
  [...]
  <build>
    [...]
    <plugins>
      [...]
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-release-plugin</artifactId>
        <version>2.4.2</version>
        <!-- optional, basic format is ${project.artifactId}-${project.version}.${project.type}-->
        <configuration>
          <tagNameFormat>v@{project.version}</tagNameFormat>
        </configuration>
      </plugin>
      [...]
    </plugins>
    [...]
  </build>
  [...]
</project>
.

및 콜

에 전화하십시오
mvn release:prepare
mvn release:perform
.

상속 vs 의존성

두 가지 다른 Maven Approches를 고려할 수 있습니다.

  • 상속, 부모 및 멀티 / 하위 모듈
  • 집계, 즉 종속성 사용

다중 Maven 프로젝트에서는 부모를 포함한 모든 모듈이 동일한 수명주기를 공유합니다. 모든 것을 방출하는 것을 방출하는 것을 방출하고, 그렇게 해제 한 것은 아닌 의미입니다.

귀하의 경우에는 앱 4에 영향을 미치는 앱 1을 수정할 수 없습니다. 4. APP 4가 APP 1에 의존하는 경우 분명히 APP 1은 APP 4에 의존 할 수 없습니다 (순환 참조는 허용되지 않습니다).

APP4와 APP1을 3로 격리하려면 멀티 모듈을 사용해서는 안되지만, 기업> 주요 프로젝트> 하위 프로젝트 (서브 모듈 아님)와 같은 POM의 상위 프로젝트 또는 POM의 Hierachy를 사용해서는 안됩니다. 그런 다음 앱 4와 응용 프로그램 1. (... app4 pom.xml로 ...으로)

에 대한 종속성을 선언하십시오.

다른 또 다른 생각 : 프로젝트와 서브 모듈의 이름이 이상하게 들립니다. "클래식"계층 구조는 종종 (대규모 프로젝트를 위해 다중 비즈니스 오브젝트 도메인을 고려해줍니다) :

Main Project (sometimes EAR) --> POM 
|-- Business Object / DAO --> POM
|   |-- Domain 1 --> JAR
|   `-- Domain 2 --> JAR
|-- Core (depends on BO)  --> JAR
`-- IHM / Web App (depends on core)  --> WAR
.

그래서 데이터베이스는 거의 계층 구조 상단에 거의 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top