OpenShift - Apache Maven 학습 3 > OpenShift 자료실

본문 바로가기
사이트 내 전체검색

OpenShift 자료실

OpenShift - Apache Maven 학습 3

페이지 정보

profile_image
작성자 꿈꾸는여행자
댓글 0건 조회 5,056회 작성일 21-04-25 14:32

본문

안녕하세요


Apache Maven 공식 사이트(https://maven.apache.org/index.html) 내용을 기준으로
학습 및 실습한 내용 공유 드립니다.

금주 실습 항목은
Maven Getting Started Guide
    What is Maven?
    How can Maven benefit my development process?
    How do I setup Maven?
    How do I make my first Maven project?
    How do I compile my application sources?
    How do I compile my test sources and run my unit tests?
    How do I create a JAR and install it in my local repository?
    What is a SNAPSHOT version?
https://maven.apache.org/guides/getting-started/index.html
입니다.


감사합니다.

> 아래

Apache Maven
https://maven.apache.org/


________________


목차

5.2. Maven Getting Started Guide
5.2.1. 섹션
5.2.2. Maven은 무엇입니까?
5.2.3. Maven이 내 개발 프로세스에 어떻게 도움이 되나요?
5.2.4. Maven을 어떻게 설정합니까?
5.2.5. 첫 번째 Maven 프로젝트를 어떻게 만드나요?
5.2.6. 내 애플리케이션 소스를 어떻게 컴파일합니까?
5.2.7. 테스트 소스를 컴파일하고 단위 테스트를 실행하려면 어떻게해야합니까?
5.2.8. JAR을 만들고 로컬 저장소에 설치하려면 어떻게해야합니까?
5.2.9. SNAPSHOT 버전이란 무엇입니까?
5.2.10. 플러그인은 어떻게 사용합니까?
5.2.11. JAR에 리소스를 어떻게 추가합니까?
5.2.12. 리소스 파일을 어떻게 필터링합니까?
5.2.13. 외부 종속성을 어떻게 사용합니까?
5.2.14. 원격 저장소에 jar를 어떻게 배포합니까?
5.2.15. 문서는 어떻게 작성합니까?
5.2.16. 다른 유형의 프로젝트를 어떻게 빌드합니까?
5.2.17. 한 번에 두 개 이상의 프로젝트를 빌드하려면 어떻게합니까?
5.2.18. 실습
5.2.18.1. How do I make my first Maven project?
5.2.18.2. How do I compile my application sources?
5.2.18.3. How do I compile my test sources and run my unit tests?
5.2.18.4. How do I create a JAR and install it in my local repository?
5.2.18.5 What is a SNAPSHOT version?
5.2.18.6. How do I use plugins?




 



5.2. Maven Getting Started Guide
이 가이드는 처음으로 Maven을 사용하는 사람들을위한 참조 용으로 작성되었지만 일반적인 사용 사례에 대한 자체 포함 된 참조 및 솔루션이 포함 된 요리 책 역할도합니다. 처음 사용하는 경우 순차적 인 방식으로 자료를 단계별로 살펴 보는 것이 좋습니다. Maven에 더 익숙한 사용자를 위해이 가이드는 당면한 요구에 대한 빠른 솔루션을 제공하기 위해 노력합니다. 이 시점에서 Maven을 다운로드하고 로컬 머신에 Maven을 설치했다고 가정합니다. 그렇게하지 않았다면 다운로드 및 설치 지침을 참조하십시오 .
자, 이제 Maven이 설치되었고 우리는 갈 준비가되었습니다. 예제로 넘어 가기 전에 Maven이 무엇인지, Maven이 팀원과의 공동 작업 및 일상 작업에 어떻게 도움이 될 수 있는지에 대해 간략하게 살펴 보겠습니다. 물론 Maven은 소규모 프로젝트에서 작동하지만 Maven은 팀 구성원이 프로젝트의 이해 관계자가 필요로하는 것에 집중할 수 있도록함으로써 팀이보다 효과적으로 운영 할 수 있도록 돕는 데 빛을 발합니다. 빌드 인프라를 Maven에 맡길 수 있습니다!
5.2.1. 섹션
* Maven은 무엇입니까?
* Maven이 내 개발 프로세스에 어떻게 도움이 되나요?
* Maven을 어떻게 설정합니까?
* 첫 번째 Maven 프로젝트를 어떻게 만드나요?
* 내 애플리케이션 소스를 어떻게 컴파일합니까?
* 테스트 소스를 컴파일하고 단위 테스트를 실행하려면 어떻게해야합니까?
* JAR을 만들고 로컬 저장소에 설치하려면 어떻게해야합니까?
* SNAPSHOT 버전이란 무엇입니까?
* 플러그인은 어떻게 사용합니까?
* JAR에 리소스를 어떻게 추가합니까?
* 리소스 파일을 어떻게 필터링합니까?
* 외부 종속성을 어떻게 사용합니까?
* 원격 저장소에 jar를 어떻게 배포합니까?
* 문서는 어떻게 작성합니까?
* 다른 유형의 프로젝트를 어떻게 빌드합니까?
* 한 번에 두 개 이상의 프로젝트를 빌드하려면 어떻게합니까?
5.2.2. Maven은 무엇입니까?
언뜻보기에 Maven은 여러 가지로 보일 수 있지만 간단히 말해서 Maven은 모범 사례 사용에 명확한 경로를 제공하여 이해도와 생산성을 높이기 위해 프로젝트의 빌드 인프라에 패턴을 적용 하려는 시도 입니다. Maven은 기본적으로 프로젝트 관리 및 이해 도구이므로 다음을 관리하는 데 도움이되는 방법을 제공합니다.
* Builds
* Documentation
* Reporting
* Dependencies
* SCMs
* Releases
* Distribution
Maven에 대한 더 많은 배경 정보를 원한다면 The Philosophy of Maven 및 The History of Maven을 확인하십시오 . 이제 사용자가 Maven을 사용하여 이점을 얻을 수있는 방법을 살펴 보겠습니다.
5.2.3. Maven이 내 개발 프로세스에 어떻게 도움이 되나요?
Maven은 표준 규칙과 관행을 사용하여 개발주기를 가속화하는 동시에 더 높은 성공률을 달성하도록 지원함으로써 빌드 프로세스에 이점을 제공 할 수 있습니다.
이제 Maven의 역사와 목적을 조금 다루었으므로 이제 Maven을 시작하고 실행할 수있는 몇 가지 실제 예제를 살펴 보겠습니다!
5.2.4. Maven을 어떻게 설정합니까?
Maven의 기본값만으로도 충분하지만 캐시 위치를 변경해야하거나 HTTP 프록시 뒤에있는 경우 구성을 만들어야합니다. 자세한 내용은 Maven 구성 가이드를 참조하세요.
5.2.5. 첫 번째 Maven 프로젝트를 어떻게 만드나요?
우리는 당신의 첫 번째 Maven 프로젝트를 만드는 일에 뛰어들 것입니다! 첫 번째 Maven 프로젝트를 만들기 위해 Maven의 아키 타입 메커니즘을 사용할 것입니다. 원형은 동일한 종류의 다른 모든 것이 만들어지는 원본 패턴 또는 모델 로 정의됩니다 . Maven에서 archetype은 일부 사용자 입력과 결합되어 사용자의 요구 사항에 맞게 조정 된 작업 Maven 프로젝트를 생성하는 프로젝트의 템플릿입니다. 이제 아키 타입 메커니즘이 어떻게 작동하는지 보여 드릴 것입니다.하지만 아키 타입에 대해 더 알고 싶으 시다면 Introduction to Archetypes 를 참조하십시오 .
첫 번째 프로젝트를 만드십시오! 가장 간단한 Maven 프로젝트를 만들려면 명령 줄에서 다음을 실행합니다.


mvn -B archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4


이 명령을 실행하면 몇 가지 일이 발생했음을 알 수 있습니다. 먼저 my-app새 프로젝트에 대해 명명 된 디렉터리 가 생성되었으며이 디렉터리에는 pom.xml다음과 같은 이름의 파일이 포함되어 있음을 알 수 있습니다.


1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2.  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3.  <modelVersion>4.0.0</modelVersion>
4. 
5.  <groupId>com.mycompany.app</groupId>
6.  <artifactId>my-app</artifactId>
7.  <version>1.0-SNAPSHOT</version>
8. 
9.  <name>my-app</name>
10.  <!-- FIXME change it to the project's website -->
11.  <url>http://www.example.com</url>
12. 
13.  <properties>
14.    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
15.    <maven.compiler.source>1.7</maven.compiler.source>
16.    <maven.compiler.target>1.7</maven.compiler.target>
17.  </properties>
18. 
19.  <dependencies>
20.    <dependency>
21.      <groupId>junit</groupId>
22.      <artifactId>junit</artifactId>
23.      <version>4.11</version>
24.      <scope>test</scope>
25.    </dependency>
26.  </dependencies>
27. 
28.  <build>
29.    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
30.      ... lots of helpful plugins
31.    </pluginManagement>
32.  </build>
33. </project>




pom.xml이 프로젝트에 대한 프로젝트 개체 모델 (POM)을 포함합니다. POM은 Maven의 기본 작업 단위입니다. Maven은 본질적으로 모든 것이 프로젝트 개념을 중심으로 진행된다는 점에서 프로젝트 중심적이므로 기억해야합니다. 요컨대, POM은 프로젝트에 대한 모든 중요한 정보를 포함하며 본질적으로 프로젝트와 관련된 모든 것을 찾기위한 원 스톱 쇼핑입니다. POM을 이해하는 것이 중요하며 신규 사용자는 POM 소개를 참조하는 것이 좋습니다 .
이것은 매우 간단한 POM이지만 여전히 모든 POM에 포함 된 핵심 요소를 표시하므로 POM 필수 사항에 익숙해 지도록 각 요소를 살펴 보겠습니다.
* project 모든 Maven pom.xml 파일의 최상위 요소입니다.
* modelVersion 이 요소는이 POM이 사용중인 개체 모델의 버전을 나타냅니다. 모델 자체의 버전은 매우 드물게 변경되지만 Maven 개발자가 모델을 변경해야한다고 판단하는 경우 사용 안정성을 보장하기 위해 필수입니다.
* groupId 이 요소는 프로젝트를 만든 조직 또는 그룹의 고유 식별자를 나타냅니다. groupId는 프로젝트의 키 식별자 중 하나이며 일반적으로 조직의 정규화 된 도메인 이름을 기반으로합니다. 예를 들어 org.apache.maven.plugins모든 Maven 플러그인에 대해 지정된 groupId입니다.
* artifactId 이 요소는이 프로젝트에서 생성되는 기본 아티팩트의 고유 한 기본 이름을 나타냅니다. 프로젝트의 기본 아티팩트는 일반적으로 JAR 파일입니다. 소스 번들과 같은 보조 아티팩트도 최종 이름의 일부로 artifactId를 사용합니다. Maven에서 생성 한 일반적인 아티팩트는 <artifactId>-<version>. <extension> (예 :) 형식 myapp-1.0.jar입니다.
* version 이 요소는 프로젝트에서 생성 된 아티팩트의 버전을 나타냅니다. Maven은 버전 관리를 돕기 위해 먼 길을 가고 있으며 종종 SNAPSHOT프로젝트가 개발 상태임을 나타내는 버전 에서 지정자를 볼 수 있습니다. 이 가이드 에서는 스냅 샷 의 사용 과 추가 작동 방식에 대해 설명합니다.
* name 이 요소는 프로젝트에 사용되는 표시 이름을 나타냅니다. 이것은 Maven의 생성 된 문서에서 자주 사용됩니다.
* url 이 요소는 프로젝트 사이트를 찾을 수있는 위치를 나타냅니다. 이것은 Maven의 생성 된 문서에서 자주 사용됩니다.
* properties 이 요소에는 POM 내 어디서나 액세스 할 수있는 값 자리 표시자가 포함되어 있습니다.
* dependencies 이 요소의 자식은 종속성을 나열합니다 . POM의 초석.
* build 이 요소는 프로젝트의 디렉토리 구조 선언 및 플러그인 관리와 같은 작업을 처리합니다.
POM에서 사용할 수있는 요소에 대한 전체 참조는 POM 참조 를 참조하십시오 . 이제 당면한 프로젝트로 돌아 갑시다.
첫 번째 프로젝트의 아키 타입 생성 후 다음 디렉토리 구조가 생성되었음을 알 수 있습니다.
my-app
|-- pom.xml
`-- src
    |-- main
    |  `-- java
    |      `-- com
    |          `-- mycompany
    |              `-- app
    |                  `-- App.java
    `-- test
        `-- java
            `-- com
                `-- mycompany
                    `-- app
                        `-- AppTest.java


보시다시피 아키 타입에서 생성 된 프로젝트에는 POM, 애플리케이션 소스 용 소스 트리 및 테스트 소스 용 소스 트리가 있습니다. 이것은 Maven 프로젝트의 표준 레이아웃입니다 (애플리케이션 소스는에 ${basedir}/src/main/java있고 테스트 소스는에 있습니다 ${basedir}/src/test/java. 여기서 $ {basedir}를 포함하는 디렉토리를 나타냅니다 pom.xml).
Maven 프로젝트를 직접 만들려면 이것이 권장되는 디렉터리 구조입니다. 이것은 Maven 규약이며 이에 대해 자세히 알아 보려면 Introduction to the Standard Directory Layout을 읽어보십시오 .
이제 POM, 일부 응용 프로그램 소스 및 질문 할 수있는 테스트 소스가 있습니다.
5.2.6. 내 애플리케이션 소스를 어떻게 컴파일합니까?
archetype:generate에 의해 pom.xml이 생성 된 디렉토리로 변경하고 다음 명령을 실행하여 애플리케이션 소스를 컴파일합니다.


mvn compile


이 명령을 실행하면 다음과 같은 출력이 표시됩니다.
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< com.mycompany.app:my-app >----------------------
[INFO] Building my-app 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ my-app ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory <dir>/my-app/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ my-app ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to <dir>/my-app/target/classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.899 s
[INFO] Finished at: 2020-07-12T11:31:54+01:00
[INFO] ------------------------------------------------------------------------


이 명령 (또는 다른 명령)을 처음 실행할 때 Maven은 명령을 수행하는 데 필요한 모든 플러그인 및 관련 종속성을 다운로드해야합니다. Maven을 새로 설치하면 상당한 시간이 소요될 수 있습니다 (위의 출력에서는 거의 4 분이 소요됨). 명령을 다시 실행하면 Maven은 이제 필요한 것을 갖게되므로 새로운 것을 다운로드 할 필요가 없으며 명령을 훨씬 더 빠르게 실행할 수 있습니다.
출력에서 볼 수 있듯이 컴파일 된 클래스는 ${basedir}/target/classes Maven에서 사용하는 또 다른 표준 규칙 인에 배치되었습니다 . 따라서 예리한 관찰자라면 표준 규칙을 사용하면 위의 POM이 매우 작으며 소스가 어디에 있는지 또는 출력이 어디로 가야하는지 Maven에 명시 적으로 말할 필요가 없다는 것을 알 수 있습니다. 표준 Maven 규칙을 따르면 아주 적은 노력으로 많은 일을 할 수 있습니다! 우연히 비교하기 위해 Ant 에서 동일한 작업 을 수행하기 위해 수행해야 했던 작업을 살펴 ​​보겠습니다 .
이제 이것은 단순히 애플리케이션 소스의 단일 트리를 컴파일하는 것이며 표시된 Ant 스크립트는 위에 표시된 POM과 거의 동일한 크기입니다. 그러나 우리는 단순한 POM으로 얼마나 더 많은 것을 할 수 있는지 알게 될 것입니다!
5.2.7. 테스트 소스를 컴파일하고 단위 테스트를 실행하려면 어떻게해야합니까?
이제 응용 프로그램의 소스를 성공적으로 컴파일하고 이제 컴파일하고 실행하려는 단위 테스트가 있습니다 (모든 프로그래머는 항상 단위 테스트를 작성하고 실행하기 때문에 * nudge nudge wink wink *).
다음 명령을 실행하십시오.
mvn test


이 명령을 실행하면 다음과 같은 출력이 표시됩니다.
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< com.mycompany.app:my-app >----------------------
[INFO] Building my-app 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ my-app ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory <dir>/my-app/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ my-app ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:testResources (default-testResources) @ my-app ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory <dir>/my-app/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ my-app ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to <dir>/my-app/target/test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ my-app ---
[INFO]
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.mycompany.app.AppTest
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.025 s - in com.mycompany.app.AppTest
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.881 s
[INFO] Finished at: 2020-07-12T12:00:33+01:00
[INFO] ------------------------------------------------------------------------


출력에 대해주의해야 할 사항 :
* 이번에는 Maven이 더 많은 종속성을 다운로드합니다. 이들은 테스트를 실행하는 데 필요한 종속성 및 플러그인입니다 (이미 컴파일에 필요한 종속성이 있으며 다시 다운로드하지 않습니다).
* 테스트를 컴파일하고 실행하기 전에 Maven은 메인 코드를 컴파일합니다 (마지막 컴파일 한 이후로 아무것도 변경하지 않았기 때문에 이러한 모든 클래스는 최신 상태입니다).
테스트 소스를 컴파일하고 싶지만 테스트를 실행하지 않으려면 다음을 실행할 수 있습니다.
mvn test-compile


이제 애플리케이션 소스를 컴파일하고, 테스트를 컴파일하고, 테스트를 실행할 수 있으므로 다음 논리적 단계로 이동하여 다음과 같은 질문을 할 것입니다.
5.2.8. JAR을 만들고 로컬 저장소에 설치하려면 어떻게해야합니까?
JAR 파일을 만드는 것은 간단하며 다음 명령을 실행하여 수행 할 수 있습니다.
mvn package


이제 ${basedir}/target디렉토리를 살펴보면 생성 된 JAR 파일을 볼 수 있습니다.
이제 생성 한 아티팩트 (JAR 파일)를 로컬 저장소 ( ${user.home}/.m2/repository기본 위치) 에 설치하려고합니다 . 리포지토리에 대한 자세한 내용은 리포지토리 소개를 참조 할 수 있지만 아티팩트 설치로 넘어가겠습니다! 이렇게하려면 다음 명령을 실행하십시오.
mvn install


이 명령을 실행하면 다음과 같은 출력이 표시됩니다.
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< com.mycompany.app:my-app >----------------------
[INFO] Building my-app 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ my-app ---
...
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ my-app ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:testResources (default-testResources) @ my-app ---
...
[INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ my-app ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ my-app ---
[INFO]
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.mycompany.app.AppTest
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.025 s - in com.mycompany.app.AppTest
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO]
[INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ my-app ---
[INFO] Building jar: <dir>/my-app/target/my-app-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ my-app ---
[INFO] Installing <dir>/my-app/target/my-app-1.0-SNAPSHOT.jar to <local-repository>/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.jar
[INFO] Installing <dir>/my-app/pom.xml to <local-repository>/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.678 s
[INFO] Finished at: 2020-07-12T12:04:45+01:00
[INFO] ------------------------------------------------------------------------


테스트를 실행하는 surefire 플러그인은 특정 명명 규칙을 가진 파일에 포함 된 테스트를 찾습니다. 기본적으로 포함 된 테스트는 다음과 같습니다.
* **/*Test.java
* **/Test*.java
* **/*TestCase.java
기본 제외는 다음과 같습니다.
* **/Abstract*Test.java
* **/Abstract*TestCase.java
일반적인 Maven 프로젝트를 설정, 빌드, 테스트, 패키징 및 설치하는 과정을 살펴 보았습니다. 이것은 Maven으로 프로젝트가 수행 할 작업의 대부분 일 가능성이 높으며, 지금까지 수행 할 수 있었던 모든 작업은 프로젝트의 모델 또는 POM이라는 18 줄 파일에 의해 구동되었습니다. 지금까지 달성 한 것과 동일한 기능을 제공 하는 일반적인 Ant 빌드 파일 을 살펴보면 이미 POM의 두 배 크기이며 이제 막 시작된 ​​것입니다! 현재 POM에 추가 할 필요없이 Maven에서 훨씬 더 많은 기능을 사용할 수 있습니다. 예제 Ant 빌드 파일에서 더 많은 기능을 얻으려면 오류가 발생하기 쉬운 추가를 계속해야합니다.
그렇다면 무료로 무엇을 얻을 수 있습니까? 위와 같은 간단한 POM으로도 즉시 작동하는 Maven 플러그인이 많이 있습니다. Maven의 매우 중요한 기능 중 하나이므로 여기서 특별히 언급하겠습니다.이 POM은 프로젝트를위한 웹 사이트를 생성하기에 충분한 정보를 가지고 있습니다. Maven 사이트를 사용자 정의하고 싶을 가능성이 높지만 시간이 부족한 경우 프로젝트에 대한 기본 정보를 제공하기 위해해야 ​​할 일은 다음 명령을 실행하는 것입니다.
mvn site


실행할 수있는 다른 많은 독립형 목표도 있습니다. 예를 들면 다음과 같습니다.
mvn clean


target시작하기 전에 모든 빌드 데이터가 있는 디렉토리를 제거하여 새로 만듭니다.
5.2.9. SNAPSHOT 버전이란 무엇입니까?
아래 표시된 파일 에있는 버전 태그 의 값에 pom.xml접미사가 -SNAPSHOT있습니다.
1. <project xmlns="http://maven.apache.org/POM/4.0.0"
2.  ...
3.  <groupId>...</groupId>
4.  <artifactId>my-app</artifactId>
5.  ...
6.  <version>1.0-SNAPSHOT</version>
7.  <name>Maven Quick Start Archetype</name>
8.  ...


이 SNAPSHOT값은 개발 브랜치의 '최신'코드를 나타내며 코드가 안정적이거나 변경되지 않는다는 보장을 제공하지 않습니다. 반대로 '릴리스'버전 (접미사없는 모든 버전 값 SNAPSHOT)의 코드는 변경되지 않습니다.
즉, SNAPSHOT 버전은 최종 '출시'버전 이전의 '개발'버전입니다. SNAPSHOT은 릴리스보다 "오래된"버전입니다.
동안 릴리스 프로세스의 버전 XY-SNAPSHOT이 로 변경 XY . 릴리스 프로세스는 또한 개발 버전을 x. (y + 1) -SNAPSHOT로 증가시킵니다 . 예를 들어, 버전 1.0은 SNAPSHOT 버전으로 릴리스 1.0 , 새로운 개발 버전은 버전 1.1 SNAPSHOT .
5.2.10. 플러그인은 어떻게 사용합니까?
Maven 프로젝트의 빌드를 사용자 정의하고 싶을 때마다 플러그인을 추가하거나 재구성하면됩니다.
이 예에서는 JDK 5.0 소스를 허용하도록 Java 컴파일러를 구성합니다. 이것은 POM에 다음을 추가하는 것만 큼 간단합니다.
1. ...
2. <build>
3.  <plugins>
4.    <plugin>
5.      <groupId>org.apache.maven.plugins</groupId>
6.      <artifactId>maven-compiler-plugin</artifactId>
7.      <version>3.3</version>
8.      <configuration>
9.        <source>1.5</source>
10.        <target>1.5</target>
11.      </configuration>
12.    </plugin>
13.  </plugins>
14. </build>
15. ...


Maven의 모든 플러그인은 종속성과 매우 유사하며 어떤면에서는 그렇습니다. 이 플러그인은 요청하는 경우 특정 버전을 포함하여 자동으로 다운로드되고 사용됩니다 (기본값은 사용 가능한 최신 버전을 사용하는 것입니다).
configuration요소는 컴파일러 플러그인에서 모든 목표에 지정된 파라미터를 적용합니다. 위의 경우 컴파일러 플러그인은 이미 빌드 프로세스의 일부로 사용되며 구성 만 변경됩니다. 프로세스에 새 목표를 추가하고 특정 목표를 구성 할 수도 있습니다. 이에 대한 정보 는 빌드 라이프 사이클 소개를 참조하십시오 .
플러그인에 사용할 수있는 구성을 확인하려면 플러그인 목록을 보고 사용중인 플러그인과 목표로 이동할 수 있습니다. 플러그인의 사용 가능한 매개 변수를 구성하는 방법에 대한 일반적인 정보는 플러그인 구성 가이드를 참조하십시오 .
5.2.11. JAR에 리소스를 어떻게 추가합니까?
위에있는 POM을 변경할 필요가없는 만족할 수있는 또 다른 일반적인 사용 사례는 JAR 파일에 리소스를 패키징하는 것입니다. 이 일반적인 작업에서 Maven은 다시 Standard Directory Layout 을 사용합니다. 즉, 표준 Maven 규칙을 사용하면 리소스를 표준 디렉터리 구조에 배치하기 만하면 JAR 내에서 리소스를 패키징 할 수 있습니다.
아래 예제 ${basedir}/src/main/resources에서 JAR에 패키징하려는 리소스를 배치 할 디렉토리 를 추가 한 것을 볼 수 있습니다 . Maven에서 사용하는 간단한 규칙은 다음과 같습니다. 디렉토리 내에 배치 된 모든 디렉토리 또는 파일 ${basedir}/src/main/resources은 JAR의 기반에서 시작하여 정확히 동일한 구조로 JAR에 패키지됩니다.
my-app
|-- pom.xml
`-- src
    |-- main
    |  |-- java
    |  |  `-- com
    |  |      `-- mycompany
    |  |          `-- app
    |  |              `-- App.java
    |  `-- resources
    |      `-- META-INF
    |          `-- application.properties
    `-- test
        `-- java
            `-- com
                `-- mycompany
                    `-- app
                        `-- AppTest.java


따라서 예제 에서 해당 디렉토리 내에 파일 이있는 META-INF디렉토리 가 있음을 알 수 있습니다 application.properties. Maven이 생성 한 JAR의 압축을 풀고 살펴보면 다음이 표시됩니다.
|-- META-INF
|  |-- MANIFEST.MF
|  |-- application.properties
|  `-- maven
|      `-- com.mycompany.app
|          `-- my-app
|              |-- pom.properties
|              `-- pom.xml
`-- com
    `-- mycompany
        `-- app
            `-- App.class


As you can see, the contents of ${basedir}/src/main/resources can be found starting at the base of the JAR and our application.properties file is there in the META-INF directory. You will also notice some other files there like META-INF/MANIFEST.MF as well as a pom.xml and pom.properties file. These come standard with generation of a JAR in Maven. You can create your own manifest if you choose, but Maven will generate one by default if you don't. (You can also modify the entries in the default manifest. We will touch on this later.) The pom.xml and pom.properties Maven에서 생성 한 각 아티팩트는 자체 설명이 가능하고 필요에 따라 자체 애플리케이션에서 메타 데이터를 활용할 수 있도록 파일이 JAR에 패키지화됩니다. 한 가지 간단한 용도는 애플리케이션 버전을 검색하는 것입니다. POM 파일에서 작업하려면 일부 Maven 유틸리티를 사용해야하지만 속성은 표준 Java API를 사용하여 활용할 수 있으며 다음과 같습니다.
#Generated by Maven
#Tue Oct 04 15:43:21 GMT-05:00 2005
version=1.0-SNAPSHOT
groupId=com.mycompany.app
artifactId=my-app


단위 테스트를 위해 클래스 경로에 리소스를 추가하려면 리소스를 배치하는 디렉터리가 $ {basedir} / src / test / resources라는 점을 제외하고 JAR에 리소스를 추가 할 때와 동일한 패턴을 따릅니다. 이 시점에서 다음과 같은 프로젝트 디렉토리 구조를 갖게됩니다.
my-app
|-- pom.xml
`-- src
    |-- main
    |  |-- java
    |  |  `-- com
    |  |      `-- mycompany
    |  |          `-- app
    |  |              `-- App.java
    |  `-- resources
    |      `-- META-INF
    |          |-- application.properties
    `-- test
        |-- java
        |  `-- com
        |      `-- mycompany
        |          `-- app
        |              `-- AppTest.java
        `-- resources
            `-- test.properties


단위 테스트에서 다음과 같은 간단한 코드 스 니펫을 사용하여 테스트에 필요한 리소스에 액세스 할 수 있습니다.
1. ...
2. 
3. // Retrieve resource
4. InputStream is = getClass().getResourceAsStream( "/test.properties" );
5. 
6. // Do something with the resource
7. 
8. ...
5.2.12. 리소스 파일을 어떻게 필터링합니까?
때로는 리소스 파일에 빌드시에만 제공 할 수있는 값이 포함되어야합니다. Maven에서이를 수행하려면 구문을 사용하여 값을 포함 할 속성에 대한 참조를 리소스 파일에 넣습니다 ${<property name>}. 속성은 pom.xml에 정의 된 값, 사용자의 settings.xml에 정의 된 값, 외부 속성 파일에 정의 된 속성 또는 시스템 속성 중 하나 일 수 있습니다.
복사 할 때 Maven에서 리소스를 필터링하려면 filtering다음의 리소스 디렉터리에 대해 true로 설정하면됩니다 pom.xml.
1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2.  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
3.  <modelVersion>4.0.0</modelVersion>
4. 
5.  <groupId>com.mycompany.app</groupId>
6.  <artifactId>my-app</artifactId>
7.  <version>1.0-SNAPSHOT</version>
8.  <packaging>jar</packaging>
9. 
10.  <name>Maven Quick Start Archetype</name>
11.  <url>http://maven.apache.org</url>
12. 
13.  <dependencies>
14.    <dependency>
15.      <groupId>junit</groupId>
16.      <artifactId>junit</artifactId>
17.      <version>4.11</version>
18.      <scope>test</scope>
19.    </dependency>
20.  </dependencies>
21. 
22.  <build>
23.    <resources>
24.      <resource>
25.        <directory>src/main/resources</directory>
26.        <filtering>true</filtering>
27.      </resource>
28.    </resources>
29.  </build>
30. </project>


당신은 우리가 추가 한 것을 알 수 있습니다 build, resources그리고 resource전에 거기 있었다 요소를. 또한 리소스가 src / main / resources 디렉토리에 있음을 명시 적으로 명시해야했습니다. 이 모든 정보는 이전에 기본값으로 제공되었지만의 기본값 filtering이 false 이므로 해당 기본값 을 재정의하고 filtering true로 설정하기 위해 pom.xml에이 정보를 추가해야했습니다 .
pom.xml에 정의 된 속성을 참조하기 위해 속성 이름은 값을 정의하는 XML 요소의 이름을 사용하며 "pom"은 프로젝트 (루트) 요소의 별칭으로 허용됩니다. 따라서 ${project.name}프로젝트 이름, 프로젝트 ${project.version}버전 ${project.build.finalName}, 빌드 된 프로젝트가 패키징 될 때 생성되는 파일의 최종 이름 등을 나타냅니다. POM의 일부 요소에는 기본값이 있으므로 사용하지 마십시오. pom.xml여기에서 값을 사용할 수 있으 려면 에 명시 적으로 정의해야합니다 . 마찬가지로 사용자의 값은 settings.xml"settings"로 시작하는 속성 이름을 사용하여 참조 할 수 있습니다 (예 : ${settings.localRepository}사용자의 로컬 저장소 경로 참조).
예제를 계속하기 위해 리소스가 필터링 될 때 값이 제공 될 application.properties파일 ( src/main/resources디렉토리에 넣음)에 몇 가지 속성을 추가해 보겠습니다 .
1. # application.properties
2. application.name=${project.name}
3. application.version=${project.version}


이를 통해 다음 명령을 실행할 수 있습니다 (process-resources는 리소스가 복사되고 필터링되는 빌드 수명주기 단계입니다).
mvn process-resources


application.properties아래 의 파일 target/classes(그리고 결국 jar로 이동합니다)은 다음과 같습니다.
1. # application.properties
2. application.name=Maven Quick Start Archetype
3. application.version=1.0-SNAPSHOT


외부 파일에 정의 된 속성을 참조하려면 pom.xml에이 외부 파일에 대한 참조를 추가 하기만 하면 됩니다. 먼저 외부 속성 파일을 만들고 이름을 지정해 보겠습니다 src/main/filters/filter.properties.
1. # filter.properties
2. my.filter.value=hello!


다음으로이 새 파일에 대한 참조를에 추가합니다 pom.xml.
1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2.  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
3.  <modelVersion>4.0.0</modelVersion>
4. 
5.  <groupId>com.mycompany.app</groupId>
6.  <artifactId>my-app</artifactId>
7.  <version>1.0-SNAPSHOT</version>
8.  <packaging>jar</packaging>
9. 
10.  <name>Maven Quick Start Archetype</name>
11.  <url>http://maven.apache.org</url>
12. 
13.  <dependencies>
14.    <dependency>
15.      <groupId>junit</groupId>
16.      <artifactId>junit</artifactId>
17.      <version>4.11</version>
18.      <scope>test</scope>
19.    </dependency>
20.  </dependencies>
21. 
22.  <build>
23.    <filters>
24.      <filter>src/main/filters/filter.properties</filter>
25.    </filters>
26.    <resources>
27.      <resource>
28.        <directory>src/main/resources</directory>
29.        <filtering>true</filtering>
30.      </resource>
31.    </resources>
32.  </build>
33. </project>


그런 다음 application.properties파일 에이 속성에 대한 참조를 추가하면 :
1. # application.properties
2. application.name=${project.name}
3. application.version=${project.version}
4. message=${my.filter.value}


다음에 mvn process-resources명령을 실행하면 새 속성 값이 application.properties. 외부 파일에서 my.filter.value 속성을 정의하는 대신 properties섹션 에서 정의 할 수도 있으며 pom.xml동일한 효과를 얻을 수 있습니다 ( src/main/filters/filter.properties둘 중 하나에 대한 참조가 필요하지 않음 ).
1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2.  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
3.  <modelVersion>4.0.0</modelVersion>
4. 
5.  <groupId>com.mycompany.app</groupId>
6.  <artifactId>my-app</artifactId>
7.  <version>1.0-SNAPSHOT</version>
8.  <packaging>jar</packaging>
9. 
10.  <name>Maven Quick Start Archetype</name>
11.  <url>http://maven.apache.org</url>
12. 
13.  <dependencies>
14.    <dependency>
15.      <groupId>junit</groupId>
16.      <artifactId>junit</artifactId>
17.      <version>4.11</version>
18.      <scope>test</scope>
19.    </dependency>
20.  </dependencies>
21. 
22.  <build>
23.    <resources>
24.      <resource>
25.        <directory>src/main/resources</directory>
26.        <filtering>true</filtering>
27.      </resource>
28.    </resources>
29.  </build>
30. 
31.  <properties>
32.    <my.filter.value>hello</my.filter.value>
33.  </properties>
34. </project>


리소스 필터링은 시스템 속성에서 값을 가져올 수도 있습니다. Java에 내장 된 시스템 특성 ( java.version또는 user.home) 또는 표준 Java -D 매개 변수를 사용하여 명령 행에 정의 된 특성. 예제를 계속하려면 application.properties다음과 같이 파일을 변경해 보겠습니다.
1. # application.properties
2. java.version=${java.version}
3. command.line.prop=${command.line.prop}


이제 다음 명령을 실행하면 (명령 줄에서 command.line.prop 속성의 정의에 유의) application.properties파일에 시스템 속성의 값이 포함됩니다.


mvn process-resources "-Dcommand.line.prop=hello again"


5.2.13. 외부 종속성을 어떻게 사용합니까?
dependencies우리가 예제로 사용한 POM 의 요소를 이미 눈치 채 셨을 것입니다 . 실제로 지금까지 외부 종속성을 사용해 왔지만 여기서는 이것이 어떻게 작동하는지 좀 더 자세히 설명하겠습니다. 더 자세한 소개는 Dependency Mechanism 소개를 참조하십시오 .
dependencies pom.xml 의 섹션에는 프로젝트를 빌드하는 데 필요한 모든 외부 종속성이 나열됩니다 (컴파일 시간, 테스트 시간, 런타임 등에서 해당 종속성이 필요한지 여부). 현재 우리 프로젝트는 JUnit에만 의존하고 있습니다 (명확성을 위해 모든 리소스 필터링 항목을 제거했습니다).
1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2.  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
3.  <modelVersion>4.0.0</modelVersion>
4. 
5.  <groupId>com.mycompany.app</groupId>
6.  <artifactId>my-app</artifactId>
7.  <version>1.0-SNAPSHOT</version>
8.  <packaging>jar</packaging>
9. 
10.  <name>Maven Quick Start Archetype</name>
11.  <url>http://maven.apache.org</url>
12. 
13.  <dependencies>
14.    <dependency>
15.      <groupId>junit</groupId>
16.      <artifactId>junit</artifactId>
17.      <version>4.11</version>
18.      <scope>test</scope>
19.    </dependency>
20.  </dependencies>
21. </project>

각 외부 종속성에 대해 groupId, artifactId, 버전 및 범위의 4 개 이상을 정의해야합니다. groupId, artifactId 및 version은 pom.xml해당 종속성을 빌드 한 프로젝트 에 대해 에 제공된 것과 동일 합니다. 범위 요소는 어떻게 프로젝트 사용하는 의존성을 나타내고, 값이 좋아 할 수있다 compile, test하고 runtime. 종속성에 대해 지정할 수있는 모든 것에 대한 자세한 내용은 Project Descriptor Reference를 참조하십시오 .
전체적인 종속성 메커니즘에 대한 자세한 내용은 종속성 메커니즘 소개를 참조하십시오 .
종속성에 대한이 정보를 통해 Maven은 프로젝트를 빌드 할 때 종속성을 참조 할 수 있습니다. Maven은 어디에서 종속성을 참조합니까? Maven은 로컬 저장소 ( ${user.home}/.m2/repository기본 위치)에서 모든 종속성을 찾습니다. A의 이전 섹션 , 우리는 로컬 저장소에 우리의 프로젝트 (내 - 응용 프로그램-1.0-SNAPSHOT.jar)에서 이슈를 설치했습니다. 일단 거기에 설치되면 다른 프로젝트는 pom.xml에 종속성 정보를 추가하여 해당 jar를 종속성으로 참조 할 수 있습니다.
1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2.  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
3.  <groupId>com.mycompany.app</groupId>
4.  <artifactId>my-other-app</artifactId>
5.  ...
6.  <dependencies>
7.    ...
8.    <dependency>
9.      <groupId>com.mycompany.app</groupId>
10.      <artifactId>my-app</artifactId>
11.      <version>1.0-SNAPSHOT</version>
12.      <scope>compile</scope>
13.    </dependency>
14.  </dependencies>
15. </project>


다른 곳에 구축 된 종속성은 어떻습니까? 내 로컬 저장소에 어떻게 들어가나요? 프로젝트가 로컬 저장소에서 사용할 수없는 종속성을 참조 할 때마다 Maven은 원격 저장소에서 로컬 저장소로 종속성을 다운로드합니다. 첫 번째 프로젝트를 빌드 할 때 Maven이 많은 것을 다운로드하는 것을 보았을 것입니다 (이 다운로드는 프로젝트를 빌드하는 데 사용 된 다양한 플러그인에 대한 종속성이었습니다). 기본적으로 Maven이 사용하는 원격 저장소는 https://repo.maven.apache.org/maven2/ 에서 찾아 볼 수 있습니다 . 기본 원격 저장소 대신 또는 기본 원격 저장소에 추가하여 사용할 자체 원격 저장소 (회사의 중앙 저장소 일 수 있음)를 설정할 수도 있습니다. 리포지토리에 대한 자세한 내용은 리포지토리 소개를 참조하십시오..
프로젝트에 다른 종속성을 추가해 보겠습니다. 코드에 로깅을 추가했고 log4j를 종속성으로 추가해야한다고 가정 해 보겠습니다. 먼저 log4j에 대한 groupId, artifactId 및 버전을 알아야합니다. Maven Central의 적절한 디렉토리는 / maven2 / log4j / log4j 입니다. 이 디렉토리에는 maven-metadata.xml이라는 파일이 있습니다. log4j의 maven-metadata.xml은 다음과 같습니다.
1. <metadata>
2.  <groupId>log4j</groupId>
3.  <artifactId>log4j</artifactId>
4.  <version>1.1.3</version>
5.  <versioning>
6.    <versions>
7.      <version>1.1.3</version>
8.      <version>1.2.4</version>
9.      <version>1.2.5</version>
10.      <version>1.2.6</version>
11.      <version>1.2.7</version>
12.      <version>1.2.8</version>
13.      <version>1.2.11</version>
14.      <version>1.2.9</version>
15.      <version>1.2.12</version>
16.    </versions>
17.  </versioning>
18. </metadata>


이 파일에서 원하는 groupId가 "log4j"이고 artifactId가 "log4j"임을 알 수 있습니다. 선택할 수있는 다양한 버전 값이 있습니다. 지금은 최신 버전 인 1.2.12를 사용합니다 (일부 maven-metadata.xml 파일은 현재 릴리스 버전을 지정할 수도 있습니다. 저장소 메타 데이터 참조 참조).). maven-metadata.xml 파일과 함께 log4j 라이브러리의 각 버전에 해당하는 디렉토리를 볼 수 있습니다. 각각의 내부에는 실제 jar 파일 (예 : log4j-1.2.12.jar)과 pom 파일 (이는 종속성에 대한 pom.xml이며, 추가 종속성 및 기타 정보를 나타냄)이 있습니다. ) 및 다른 maven-metadata.xml 파일. 이들 각각에 해당하는 md5 파일도 있으며, 여기에는 이러한 파일에 대한 MD5 해시가 포함되어 있습니다. 이를 사용하여 라이브러리를 인증하거나 이미 사용중인 특정 라이브러리의 버전을 파악할 수 있습니다.
이제 필요한 정보를 알았으므로 pom.xml에 종속성을 추가 할 수 있습니다.


1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2.  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
3.  <modelVersion>4.0.0</modelVersion>
4. 
5.  <groupId>com.mycompany.app</groupId>
6.  <artifactId>my-app</artifactId>
7.  <version>1.0-SNAPSHOT</version>
8.  <packaging>jar</packaging>
9. 
10.  <name>Maven Quick Start Archetype</name>
11.  <url>http://maven.apache.org</url>
12. 
13.  <dependencies>
14.    <dependency>
15.      <groupId>junit</groupId>
16.      <artifactId>junit</artifactId>
17.      <version>4.11</version>
18.      <scope>test</scope>
19.    </dependency>
20.    <dependency>
21.      <groupId>log4j</groupId>
22.      <artifactId>log4j</artifactId>
23.      <version>1.2.12</version>
24.      <scope>compile</scope>
25.    </dependency>
26.  </dependencies>
27. </project>


이제 프로젝트 ( mvn compile)를 컴파일 할 때 Maven이 log4j 종속성을 다운로드하는 것을 볼 수 있습니다.
5.2.14. 원격 저장소에 jar를 어떻게 배포합니까?
jar를 외부 저장소에 배포하려면 pom.xml에 저장소 URL을 구성하고 settings.xml에 저장소에 연결하기위한 인증 정보를 구성해야합니다.
다음은 scp 및 사용자 이름 / 암호 인증을 사용하는 예입니다.


1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2.  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
3.  <modelVersion>4.0.0</modelVersion>
4. 
5.  <groupId>com.mycompany.app</groupId>
6.  <artifactId>my-app</artifactId>
7.  <version>1.0-SNAPSHOT</version>
8.  <packaging>jar</packaging>
9. 
10.  <name>Maven Quick Start Archetype</name>
11.  <url>http://maven.apache.org</url>
12. 
13.  <dependencies>
14.    <dependency>
15.      <groupId>junit</groupId>
16.      <artifactId>junit</artifactId>
17.      <version>4.11</version>
18.      <scope>test</scope>
19.    </dependency>
20.    <dependency>
21.      <groupId>org.apache.codehaus.plexus</groupId>
22.      <artifactId>plexus-utils</artifactId>
23.      <version>1.0.4</version>
24.    </dependency>
25.  </dependencies>
26. 
27.  <build>
28.    <filters>
29.      <filter>src/main/filters/filters.properties</filter>
30.    </filters>
31.    <resources>
32.      <resource>
33.        <directory>src/main/resources</directory>
34.        <filtering>true</filtering>
35.      </resource>
36.    </resources>
37.  </build>
38.  <!--
39.  |
40.  |
41.  |
42.  -->
43.  <distributionManagement>
44.    <repository>
45.      <id>mycompany-repository</id>
46.      <name>MyCompany Repository</name>
47.      <url>scp://repository.mycompany.com/repository/maven2</url>
48.    </repository>
49.  </distributionManagement>
50. </project>



1. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2.  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
3.  ...
4.  <servers>
5.    <server>
6.      <id>mycompany-repository</id>
7.      <username>jvanzyl</username>
8.      <!-- Default value is ~/.ssh/id_dsa -->
9.      <privateKey>/path/to/identity</privateKey> (default is ~/.ssh/id_dsa)
10.      <passphrase>my_key_passphrase</passphrase>
11.    </server>
12.  </servers>
13.  ...
14. </settings>


sshd_confing에서 "PasswordAuthentication"매개 변수가 "no"로 설정된 openssh ssh 서버에 연결하는 경우 사용자 이름 / 암호 인증을 위해 매번 암호를 입력해야합니다 (다른 ssh를 사용하여 로그인 할 수 있음). 사용자 이름과 암호를 입력하여 클라이언트). 이 경우 공개 키 인증으로 전환 할 수 있습니다.
에서 암호를 사용하는 경우주의해야합니다 settings.xml. 자세한 내용은 암호 암호화를 참조하십시오 .
5.2.15. 문서는 어떻게 작성합니까?
Maven의 문서 시스템을 시작하려면 다음 명령을 사용하여 아키 타입 메커니즘을 사용하여 기존 프로젝트에 대한 사이트를 생성 할 수 있습니다.
1. mvn archetype:generate \
2.  -DarchetypeGroupId=org.apache.maven.archetypes \
3.  -DarchetypeArtifactId=maven-archetype-site \
4.  -DgroupId=com.mycompany.app \
5.  -DartifactId=my-app-site


이제 사이트 만들기 가이드로 이동 하여 프로젝트 문서를 만드는 방법을 알아보세요.
5.2.16. 다른 유형의 프로젝트를 어떻게 빌드합니까?
수명주기는 모든 프로젝트 유형에 적용됩니다. 예를 들어, 기본 디렉토리로 돌아가서 간단한 웹 애플리케이션을 만들 수 있습니다.
1. mvn archetype:generate \
2.    -DarchetypeGroupId=org.apache.maven.archetypes \
3.    -DarchetypeArtifactId=maven-archetype-webapp \
4.    -DgroupId=com.mycompany.app \
5.    -DartifactId=my-webapp


이들은 모두 한 줄에 있어야합니다. 그러면 my-webapp다음 프로젝트 설명자를 포함하는 라는 디렉토리가 생성됩니다 .
1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2.  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
3.  <modelVersion>4.0.0</modelVersion>
4. 
5.  <groupId>com.mycompany.app</groupId>
6.  <artifactId>my-webapp</artifactId>
7.  <version>1.0-SNAPSHOT</version>
8.  <packaging>war</packaging>
9. 
10.  <dependencies>
11.    <dependency>
12.      <groupId>junit</groupId>
13.      <artifactId>junit</artifactId>
14.      <version>4.11</version>
15.      <scope>test</scope>
16.    </dependency>
17.  </dependencies>
18. 
19.  <build>
20.    <finalName>my-webapp</finalName>
21.  </build>
22. </project>


<packaging>요소에 유의하십시오. 이것은 Maven에게 WAR로 빌드하도록 지시합니다. webapp 프로젝트의 디렉토리로 변경하고 다음을 시도하십시오.


mvn package


당신은 볼 수 target/my-webapp.war 내장되어, 모든 정상 단계가 실행 된 것이다.
5.2.17. 한 번에 두 개 이상의 프로젝트를 빌드하려면 어떻게합니까?
여러 모듈을 다루는 개념은 Maven에 내장되어 있습니다. 이 섹션에서는 위의 WAR을 빌드하는 방법을 보여주고 이전 JAR도 한 단계에 포함합니다.
먼저, pom.xml다른 두 개 위에있는 디렉토리에 부모 파일 을 추가 해야하므로 다음과 같이 표시되어야합니다.
+- pom.xml
+- my-app
| +- pom.xml
| +- src
|  +- main
|    +- java
+- my-webapp
| +- pom.xml
| +- src
|  +- main
|    +- webapp


생성 할 POM 파일에는 다음이 포함되어야합니다.
1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2.  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
3.  <modelVersion>4.0.0</modelVersion>
4. 
5.  <groupId>com.mycompany.app</groupId>
6.  <artifactId>app</artifactId>
7.  <version>1.0-SNAPSHOT</version>
8.  <packaging>pom</packaging>
9. 
10.  <modules>
11.    <module>my-app</module>
12.    <module>my-webapp</module>
13.  </modules>
14. </project>


웹앱의 JAR에 대한 종속성이 필요하므로 다음을 추가하십시오 my-webapp/pom.xml.


1.  ...
2.  <dependencies>
3.    <dependency>
4.      <groupId>com.mycompany.app</groupId>
5.      <artifactId>my-app</artifactId>
6.      <version>1.0-SNAPSHOT</version>
7.    </dependency>
8.    ...
9.  </dependencies>


마지막으로 하위 디렉터리 <parent>의 다른 두 pom.xml파일에 다음 요소를 추가합니다 .


1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2.  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
3.  <parent>
4.    <groupId>com.mycompany.app</groupId>
5.    <artifactId>app</artifactId>
6.    <version>1.0-SNAPSHOT</version>
7.  </parent>
8.  ...


이제 시도해보십시오 ... 최상위 디렉토리에서 다음을 실행하십시오.
mvn verify


이제 WAR이에서 생성되었으며 my-webapp/target/my-webapp.war JAR이 포함되었습니다.
$ jar tvf my-webapp/target/my-webapp-1.0-SNAPSHOT.war
  0 Fri Jun 24 10:59:56 EST 2005 META-INF/
 222 Fri Jun 24 10:59:54 EST 2005 META-INF/MANIFEST.MF
  0 Fri Jun 24 10:59:56 EST 2005 META-INF/maven/
  0 Fri Jun 24 10:59:56 EST 2005 META-INF/maven/com.mycompany.app/
  0 Fri Jun 24 10:59:56 EST 2005 META-INF/maven/com.mycompany.app/my-webapp/
3239 Fri Jun 24 10:59:56 EST 2005 META-INF/maven/com.mycompany.app/my-webapp/pom.xml
  0 Fri Jun 24 10:59:56 EST 2005 WEB-INF/
 215 Fri Jun 24 10:59:56 EST 2005 WEB-INF/web.xml
 123 Fri Jun 24 10:59:56 EST 2005 META-INF/maven/com.mycompany.app/my-webapp/pom.properties
  52 Fri Jun 24 10:59:56 EST 2005 index.jsp
  0 Fri Jun 24 10:59:56 EST 2005 WEB-INF/lib/
2713 Fri Jun 24 10:59:56 EST 2005 WEB-INF/lib/my-app-1.0-SNAPSHOT.jar


어떻게 작동합니까? 첫째, 생성 된 상위 POM (라고 함 app)에는 패키징 pom및 정의 된 모듈 목록이 있습니다. 이렇게하면 Maven이 현재 프로젝트 대신 프로젝트 집합에 대해 모든 작업을 실행하도록 지시합니다 (이 동작을 재정의하려면 --non-recursive명령 줄 옵션을 사용할 수 있습니다 ).
다음으로 WAR에 my-appJAR 이 필요하다는 것을 알립니다 . 이것은 몇 가지 작업을 수행합니다. WAR의 모든 코드에 대한 클래스 경로에서 사용할 수있게하고 (이 경우에는 없음) JAR이 항상 WAR 이전에 빌드되었는지 확인하며 JAR을 포함하도록 WAR 플러그인에 알립니다. 라이브러리 디렉토리.
그것이 junit-4.11.jar의존성 이라는 것을 눈치 챘을 수도 있지만 WAR에서 끝나지 않았습니다. 그 이유는 <scope>test</scope>요소 때문입니다. 테스트에만 필요하므로 컴파일 시간 종속성 my-app이 그렇기 때문에 웹 애플리케이션에 포함되지 않습니다 .
마지막 단계는 부모 정의를 포함하는 것이 었습니다. 이를 통해 프로젝트가 저장소에서 조회하여 상위 프로젝트와 별도로 배포 된 경우에도 POM을 항상 찾을 수 있습니다.
5.2.18. 실습
5.2.18.1. How do I make my first Maven project?
* Project 생성
mkdir C:\Work\Maven\project2
cd C:\Work\Maven\project2


mvn -B archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4

[INFO] --- maven-archetype-plugin:3.2.0:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Batch mode
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: maven-archetype-quickstart:1.4
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.mycompany.app
[INFO] Parameter: artifactId, Value: my-app
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: com.mycompany.app
[INFO] Parameter: packageInPathFormat, Value: com/mycompany/app
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: com.mycompany.app
[INFO] Parameter: groupId, Value: com.mycompany.app
[INFO] Parameter: artifactId, Value: my-app
[INFO] Project created from Archetype in dir: C:\Work\Maven\project2\my-app
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  6.784 s
[INFO] Finished at: 2021-04-25T09:23:28+09:00
[INFO] ------------------------------------------------------------------------


C:\Work\Maven\project2>


5.2.18.2. How do I compile my application sources?
* mvn compile
cd my-app
mvn compile
C:\Work\Maven\project2>cd my-app


C:\Work\Maven\project2\my-app>dir
 C 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: 126A-745E


 C:\Work\Maven\project2\my-app 디렉터리


2021-04-25  오전 09:23    <DIR>          .
2021-04-25  오전 09:23    <DIR>          ..
2021-04-25  오전 09:23            2,728 pom.xml
2021-04-25  오전 09:23    <DIR>          src
              1개 파일              2,728 바이트
              3개 디렉터리  53,043,613,696 바이트 남음


C:\Work\Maven\project2\my-app>mvn compile
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< com.mycompany.app:my-app >----------------------
[INFO] Building my-app 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ my-app ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Work\Maven\project2\my-app\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ my-app ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to C:\Work\Maven\project2\my-app\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.656 s
[INFO] Finished at: 2021-04-25T09:26:27+09:00
[INFO] ------------------------------------------------------------------------


C:\Work\Maven\project2\my-app>


5.2.18.3. How do I compile my test sources and run my unit tests?
* mvn test
mvn test
C:\Work\Maven\project2\my-app>mvn test
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< com.mycompany.app:my-app >----------------------
[INFO] Building my-app 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ my-app ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Work\Maven\project2\my-app\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ my-app ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:testResources (default-testResources) @ my-app ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Work\Maven\project2\my-app\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ my-app ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to C:\Work\Maven\project2\my-app\target\test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ my-app ---
[INFO]
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.mycompany.app.AppTest
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.048 s - in com.mycompany.app.AppTest
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.806 s
[INFO] Finished at: 2021-04-25T09:27:20+09:00
[INFO] ------------------------------------------------------------------------


C:\Work\Maven\project2\my-app>




mvn test-compile
C:\Work\Maven\project2\my-app>mvn test-compile
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< com.mycompany.app:my-app >----------------------
[INFO] Building my-app 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ my-app ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ my-app ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:testResources (default-testResources) @ my-app ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Work\Maven\project2\my-app\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ my-app ---
[INFO] Nothing to compile - all classes are up to date
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.050 s
[INFO] Finished at: 2021-04-25T10:15:46+09:00
[INFO] ------------------------------------------------------------------------


C:\Work\Maven\project2\my-app>


5.2.18.4. How do I create a JAR and install it in my local repository?
* Making a JAR file
mvn package
mvn install
C:\Work\Maven\project2\my-app>mvn package
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< com.mycompany.app:my-app >----------------------
[INFO] Building my-app 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ my-app ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Work\Maven\project2\my-app\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ my-app ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:testResources (default-testResources) @ my-app ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Work\Maven\project2\my-app\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ my-app ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ my-app ---
[INFO]
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.mycompany.app.AppTest
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.044 s - in com.mycompany.app.AppTest
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO]
[INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ my-app ---
[INFO] Building jar: C:\Work\Maven\project2\my-app\target\my-app-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.626 s
[INFO] Finished at: 2021-04-25T09:30:20+09:00
[INFO] ------------------------------------------------------------------------


C:\Work\Maven\project2\my-app>mvn install
[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< com.mycompany.app:my-app >----------------------
[INFO] Building my-app 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ my-app ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Work\Maven\project2\my-app\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ my-app ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:3.0.2:testResources (default-testResources) @ my-app ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Work\Maven\project2\my-app\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ my-app ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-pl

첨부파일

댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

사이트 정보

회사명 : (주)리눅스데이타시스템 / 대표 : 정정모
서울본사 : 서울특별시 강남구 봉은사로 114길 40 홍선빌딩 2층 / tel : 02-6207-1160
대전지사 : 대전광역시 유성구 노은로174 도원프라자 5층 / tel : 042-331-1161

접속자집계

오늘
202
어제
1,534
최대
3,935
전체
756,934
Copyright © www.linuxdata.org All rights reserved.