CodeGym /Java Course /모듈 3 /고급 Maven 프로젝트 빌드

고급 Maven 프로젝트 빌드

모듈 3
레벨 2 , 레슨 0
사용 가능

1.1 Maven에서 빌드할 플러그인 목록

Maven의 어셈블리는 매우 유연하게 구성할 수 있습니다. Maven 개발자는 다양한 빌드를 매우 유연하게 구성할 수 있는 수십 개의 플러그인을 특별히 만들었습니다. 가장 인기있는 것은 아래 표에 나와 있습니다.

플러그인 설명
1 메이븐 컴파일러 플러그인 Java 컴파일 관리
2 메이븐 리소스 플러그인 어셈블리에 리소스 포함을 제어합니다.
메이븐 소스 플러그인 소스 코드가 어셈블리에 포함되는지 여부를 제어합니다.
4 메이븐 의존성 플러그인 종속성 라이브러리 복사 프로세스를 제어합니다.
5 maven-jar-플러그인 최종 jar 파일 생성 플러그인
6 메이븐 전쟁 플러그인 최종 war 파일 생성 플러그인
7 maven-surefire-플러그인 테스트 실행 관리
8 빌드 번호-maven-플러그인 빌드 번호 생성

각 플러그인은 나름대로 흥미롭지만 모두 분석해야 합니다. 가장 중요한 것인 컴파일 관리 플러그인부터 시작하겠습니다.

1.2 컴파일 플러그인 maven-compiler-plugin

컴파일러 버전을 제어할 수 있고 거의 모든 프로젝트에서 사용되는 가장 인기 있는 플러그인은 maven-compiler-plugin. 기본 설정이 있지만 거의 모든 프로젝트에서 다시 설정해야 합니다.

가장 간단한 버전인 플러그인에서 Java 소스 코드의 버전과 어셈블리가 수행되는 Java 시스템의 버전을 지정해야 합니다.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.2</version>
    <configuration>
        <source>1.11</source>
        <target>1.13</target>
        <encoding>UTF-8</encoding>
    </configuration>
</plugin>

위의 예에서는 , 및 의 세 가지 Java 컴파일러 옵션을 source설정 target했습니다 encoding.

이 매개변수를 사용 source하면 소스의 Java 버전을 설정할 수 있습니다. 매개변수는 target클래스를 컴파일하려는 Java 시스템의 버전입니다. 코드 또는 Java 머신 버전이 지정되지 않은 경우 기본값은 1.3입니다.

마지막으로 이 매개변수를 사용 encoding하면 Java 파일의 인코딩을 지정할 수 있습니다. 우리는 를 표시했습니다 UTF-8. 이제 거의 모든 소스가 UTF-8. 그러나이 매개 변수를 지정하지 않으면 운영 체제의 현재 인코딩이 선택됩니다. Windows의 경우 인코딩입니다 Windows-1251.

빌드 컴퓨터에 여러 버전의 Java가 설치되어 있는 경우도 있습니다. 다른 모듈 및/또는 다른 프로젝트를 빌드하기 위해서입니다. 이 경우 JAVA_HOME그 중 하나에 대한 경로만 변수에 지정할 수 있습니다.

또한 Java 머신에는 OpenJDK, OracleJDK, Amazon JDK 등 다양한 구현이 있습니다. 그리고 프로젝트가 클수록 구조가 더 복잡해집니다. 그러나 태그를 사용하여 플러그인의 javac 컴파일러 경로를 명시적으로 설정할 수 있습니다. . 이 경우를 위해 특별히 추가되었습니다.

플러그인에는 maven-compiler-plugin두 가지 목표가 있습니다.

  • compiler:compile– 소스 컴파일, 기본적으로 컴파일 단계와 연결됨
  • compiler:testCompile– 테스트 컴파일, 기본적으로 테스트 컴파일 단계와 연결됩니다.

명령줄에서 javac 컴파일러에 전달할 인수 목록을 지정할 수도 있습니다.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.2</version>
    <configuration>
        <compilerArgs>
            <arg>-verbose</arg>
            <arg>-Xlint:all,-options,-path<arg>
        </compilerArgs>
    </configuration>
</plugin>

1.3 jar 파일 생성을 위한 플러그인 maven-jar-plugin

Maven으로 자신만의 jar 라이브러리를 구축하려면 maven-jar-plugin이 필요합니다. 이 플러그인은 유용한 일을 많이 합니다.

그러한 플러그인의 예:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <includes>
            <include>**/properties/*</include>
        </includes>
        <archive>
           <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
        </archive>
    </configuration>
</plugin>

첫째, 라이브러리에 들어갈 파일과 그렇지 않을 파일을 지정하는 데 사용할 수 있습니다. <include>섹션의 태그를 사용하여 컨텐츠를 라이브러리에 추가해야 하는 디렉토리 목록을<includes> 지정할 수 있습니다 .

둘째, 각 jar에는 매니페스트( MANIFEST.MF 파일 )가 있어야 합니다. 플러그인 자체가 라이브러리의 올바른 위치에 배치하므로 가져올 경로를 지정하기만 하면 됩니다. 이를 위해 태그가 사용됩니다 <manifestFile>.

마지막으로 플러그인은 자체적으로 매니페스트를 생성할 수 있습니다. 이렇게 하려면 태그 대신 태그를 추가 하고 향후 매니페스트에 대한 데이터를 지정 <manifestFile>해야 합니다 . <manifest>예:

<configuration>
    <archive>
        <manifest>
            <addClasspath>true</addClasspath>
            <classpathPrefix>lib/</classpathPrefix>
            <mainClass>com.codegym.MainApplication</mainClass>
        </manifest>
    </archive>
</configuration>

태그는 <addClasspath>매니페스트에 추가할지 여부를 지정합니다 CLASSPATH.

태그를 사용 <classpathPrefix>하면 각 리소스 앞에 접두사(예제 lib에서)를 추가할 수 있습니다. 접두사를 지정하면 <classpathPrefix>별도의 폴더에 종속성을 배치할 수 있습니다.

예, 다른 라이브러리 안에 라이브러리를 배치할 수 있습니다. 그리고 jar 라이브러리에 있는 jar 라이브러리에 있는 속성 파일의 경로를 어딘가에 전달해야 할 때 많은 놀라움이 기다리고 있습니다.

마지막으로 태그는 <mainClass>기본 실행 가능 클래스를 가리킵니다. “ 메인 실행 가능한 클래스는 무엇입니까? ", - 물어. 그리고 중요한 것은 Java 머신이 Java 클래스뿐만 아니라 jar 파일에 의해 지정된 프로그램을 실행할 수 있다는 것입니다. 이 경우 기본 시작 클래스가 필요합니다.

1.4 빌드 번호 생성 플러그인 buildnumber-maven-plugin

종종 jar 라이브러리와 war 파일에는 프로젝트 이름과 버전, 어셈블리 버전 정보가 포함됩니다. 이는 종속성 관리에 유용할 뿐만 아니라 테스트를 단순화합니다. 오류가 수정된 라이브러리 버전과 오류가 추가된 버전이 명확합니다.

대부분의 경우이 작업은 다음과 같이 해결됩니다. 필요한 모든 정보가 포함 된 특수 파일을 만들고 application.properties어셈블리에 포함시킵니다. MANIFEST.MF이 파일의 데이터가 등 으로 마이그레이션되도록 빌드 스크립트를 구성할 수도 있습니다.

그러나 가장 흥미로운 점은 Maven에 이러한 application.properties 파일을 생성할 수 있는 특수 플러그인이 있다는 것입니다. 이렇게 하려면 해당 파일을 만들고 특수 데이터 템플릿으로 채워야 합니다. 예:

# application.properties
app.name=${pom.name}
app.version=${pom.version}
app.build=${buildNumber}

세 매개변수의 값은 모두 빌드 단계에서 대체됩니다.

매개변수 pom.namepom.version에서 직접 가져옵니다 pom.xml. 그리고 Maven에서 고유한 빌드 번호를 생성하기 위해 특별한 플러그인이 있습니다 buildnumber-maven-plugin. 아래 예를 참조하십시오.

<packaging>war</packaging>
<version>1.0</version>
<plugins>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>buildnumber-maven-plugin</artifactId>
        <version>1.2</version>
        <executions>
            <execution>
                <phase>validate</phase>
                <goals>
                    <goal>create</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <revisionOnScmFailure>true</revisionOnScmFailure>
            <format>{0}-{1,date,yyyyMMdd}</format>
            <items>
                 <item>${project.version}</item>
                 <item>timestamp</item>
            </items>
        </configuration>
    </plugin>
</plugins>

위의 예에서 세 가지 중요한 일이 발생합니다. 먼저 어셈블리 버전을 설정하기 위해 플러그인 자체가 지정됩니다 . 둘째, 유효성 검사 단계(첫 번째 단계) 중에 실행되고 빌드 번호를 생성하도록 지정됩니다 ${buildNumber}.

셋째, 이 어셈블리 번호의 형식이 표시되며 여러 부분에서 함께 붙어 있습니다 . 이것은 프로젝트의 버전 project.version과 템플릿에서 제공하는 현재 시간입니다. 템플릿 형식은 Java 클래스에 의해 지정됩니다 MessageFormat.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION