1

maven-assembly-plugin을 사용하여 다중 모듈 프로젝트에 대한 배포 어셈블리 ("dir"형식)를 만듭니다. 프로젝트는 다음과 같습니다 :Maven : 사이트 (다중 모듈)가 포함 된 배포 어셈블리 생성

+ my-project 
    +-- my-child-project-1 
    +-- my-child-project-2 

하위 프로젝트는 my-project에서 상속됩니다. my-project은 집합체이며, 즉 <modules> 섹션의 하위 프로젝트를 정의합니다.

어셈블리에 아티팩트, 소스 등이 포함되어 있습니다. 사이트를 포함하도록 프로젝트를 어떻게 설정해야합니까?

my-project 하위 모듈에 대한 사이트의 링크가 작동해야합니다. 내가 아는 한 배포 전에는 링크가 작동하지 않습니다. 따라서 사이트를 먼저 단계별로 배포해야한다고 생각합니다 (?). docs에 따르면, 준비 사이트를 생성 한 후에 만 ​​가능합니다 :

이 목표는 이미 MVN 사이트를 호출하여 같은 사이트 목표를 사용하여 생성 된 수있는 사이트가 필요합니다.

어떻게하면됩니까?

mvn package 한 개로 조립 된 모든 것을 얻을 수있는 방법이 있습니까? 내 어셈블리 기술자는 어떻게 생겼을까요?

답변

0

이 좋은 해결책이 있다면 나는 모른다, 그러나 다른 응답이 있었다, 그래서 나는이 함께했다 : 어셈블리는 별도의 하위 모듈

에 구축

1. 이동 중요 : 이것이 필요한지 모르겠지만 어셈블리가 루트 프로젝트에 구성되어있는 경우에도 작동 여부를 확인할 시간이 없습니다. 그렇지 않으면 my-project에서 my-project까지 의존성을 2 단계에서 다른 분류 자로 정의해야합니다.이 방법은 효과가 없을 것입니다. 내가 틀렸다면이 답변을 편집하십시오.

+ my-project 
    +-- my-child-project-1 
    +-- my-child-project-2 
    +-- my-project-build 

2.

<!-- Yes, also for the parent project. However, not for the build project itself --> 
<dependency> 
    <groupId>${project.groupId}</groupId> 
    <artifactId>my-project</artifactId> 
    <version>${project.version}</version> 
    <classifier>site</version> 
</dependency> 
<dependency> 
    <groupId>${project.groupId}</groupId> 
    <artifactId>my-project</artifactId> 
    <version>${project.version}</version> 
    <classifier>site</version> 
</dependency> 
... 

3. 조립 기술자에 dependencySets 정의 빌드 프로젝트에 분류 site 모든 모듈에 대한 종속성을 정의합니다. 하위 모듈 사이트 콘텐츠를 주 모듈의 사이트 디렉터리의 각 하위 디렉터리로 이동하여 끊어진 링크를 수정합니다.

아이디어는 site - 분류 자 ​​종속성으로 인해 생성 된 사이트 - 병 아티팩트를 사용하여 압축을 푸는 것입니다. 모듈 링크는 상대적이므로, artifactIds로 명명 된 하위 디렉토리에 내용을 푸는 것은 해당 링크를 수정합니다.

<dependencySets> 

    <dependencySet> 
     <outputDirectory>site</outputDirectory> 
     <useProjectArtifact>true</useProjectArtifact> 
     <useProjectAttachments>true</useProjectAttachments> 
     <unpack>true</unpack> 
     <includes> 
      <include>*:my-project:jar:site</include> 
     </includes> 
    </dependencySet> 

    <!-- sites of sub modules --> 
    <dependencySet> 
     <includes> 
      <include>*:my-child-project-1:jar:site</include> 
      <include>*:my-child-project-2:jar:site</include> 
      <include>*:my-project-build:jar:site</include> 
     </includes> 
     <outputDirectory>site/${artifact.artifactId}</outputDirectory> 
     <useProjectArtifact>true</useProjectArtifact> 
     <useProjectAttachments>true</useProjectAttachments> 
     <unpack>true</unpack> 
    </dependencySet> 

    <!-- sites of sub-sub modules (if required) --> 
    <dependencySet> 
     <includes> 
      ... 
     </includes> 
     <outputDirectory>site/${artifact.parent.artifactId}/${artifact.artifactId}</outputDirectory> 
     <useProjectArtifact>true</useProjectArtifact> 
     <useProjectAttachments>true</useProjectAttachments> 
     <unpack>true</unpack> 
    </dependencySet> 

    ... 
</dependencySets> 

4. 루트 프로젝트의 site:jar 목표를 정의

이 목표는 package 단계에서 실행 기본적으로하고 생성의 종속으로 정의 된 "사이트"-attachments (예 : my-parent-1.0.0-site.jar) 2 단계에서 3 단계에서 압축을 풉니 다.

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-site-plugin</artifactId> 
      <version>3.4</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>jar</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

5.mvn package을 실행하여 어셈블리를 생성하십시오.

결과는 작동 링크가있는 전체 사이트가 포함 된 어셈블리의 하위 디렉토리 "site"입니다.