안녕하세요 여러분, 친애하는 친구 여러분. 즉시 사과드리고 싶습니다. 일주일에 한 번씩 기사를 쓰겠다고 약속했던 기억이 납니다. 운동하지 않았습니다. 아직 제대로 앉아서 글을 쓰는 게 익숙하지 않은 것뿐인데, 이렇게는 하고 싶지 않다. 나는 그것이 필요하지 않고 당신도 확실히 관심이 없기 때문에 그 이유에 대해 징징 거리지 않을 것입니다. 프로젝트는 죽지 않았습니다. 정체 상태였습니다 :) 계속합니다! 오늘의 자료는 Maven에 관한 것입니다.
복제 됩니다 .
메이븐에 대해 이야기해보자
먼저 설치해야합니다. 물론 저는 Mac을 가지고 있기 때문에 Mac용 설치만 보여드릴 수 있습니다. 단지 불운일 뿐입니다. 설치한지는 오래됐으니 직접 하셔야 할 것 같아요 :)Maven 설치 지침은 이 자료에 있습니다 . |
왜 메이븐이 필요한가?
Maven은 Gradle, Ant와 함께 프로젝트 빌드 도구입니다. JRTB(JavaRush Telegram Bot)에서 사용할 것이기 때문에 최신 소식을 전해드리고 싶습니다. 요즘에는 조립 시스템 없이는 단 하나의 프로젝트도 생성되지 않습니다. 왜냐하면 조립 시스템이 우리 삶을 여러 번 단순화하기 때문입니다. 이를 통해 다음이 가능합니다.- • 필요한 모든 라이브러리를 가져옵니다(어셈블리 도구 측면에서 종속성(즉, 종속성)).
- • 프로젝트를 어떻게 조립하고 무엇으로 구성해야 하는지 정확히 결정합니다(예: WAR, JAR 또는 실행 가능한 JAR로 수집할 것인지).
- • 프로젝트 버전을 한 곳에 설정하여 조립 중에 표시되도록 합니다.
- • 프로젝트와 그 수명주기를 설명합니다.
- • 소위 플러그인(영어 단어 Plugin의 전통적인 버전)을 추가합니다.
- • 다른 프로젝트가 라이브러리를 종속성으로 가져올 수 있도록 공유 저장소에 라이브러리를 게시합니다.
pom.xml은 모든 것의 머리입니다
필요한 모든 것은 pom.xml에 있습니다. 프로젝트, 개발자 및 프로젝트가 저장된 원격 저장소에 대한 모든 정보입니다. 처음에는 다음 블록에 관심이 있습니다. <project/> - 프로젝트에 대한 모든 정보가 포함된 기본 블록입니다. 다른 모든 항목은 명시적으로 또는 전이적으로 포함됩니다. 여는 태그 안에는 다음과 같은 내용이 적혀 있습니다.<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
그리고 무엇보다도 다음 줄도 모든 pomniks로 작성됩니다(속어는 pom.xml에서 가져온 것으로 추정됩니다 :)).
<modelVersion>4.0.0</modelVersion>
하지만 그러면 더욱 흥미로워집니다. 기념관이 설명하는 프로젝트를 어떻게 식별하는지 설명하겠습니다. 내 라이브러리를 예로 들어 설명하고 메모리에 새로 생성된 프로젝트에 추가하겠습니다.
<groupId>com.github.romankh3</groupId>
<artifactId>image-comparison</artifactId>
<version>4.4.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Image Comparison</name>
여기서 가장 중요한 것은:
- • groupId 는 개발 조직 또는 개별 엔지니어의 식별자입니다. 일반적으로 도메인의 역순입니다. 예를 들어 Github의 romankh3 계정이 여기에 설명되어 있습니다. 그것은 매우 중요합니다. Spring 생태계의 경우 com.springframework 라고 가정해 보겠습니다 . 이렇게 하면 원본 프로젝트를 다른 사람의 포크와 구별하거나 단순히 프로젝트 이름의 일치만으로 구별할 수 있습니다.
- • artifaceId는 이미 이 메모리에 설명되어 있는 특정 프로젝트의 이름입니다.
- • 버전 - 이 프로젝트의 버전입니다. 여기에 있는 모든 것이 날처럼 명확합니다. 새로운 기능 추가, 기존 기능 수정, 리팩토링 또는 기타 변경 사항 적용 - 버전 증가.
- • 패키징 - 여기에서는 Maven이 프로젝트를 어떻게 조립해야 하는지 설명합니다. Jar, War, 또는 다른 것 중 하나입니다 .
- • 이름 - 프로젝트에 대한 더 보기 좋은 이름입니다.
- • 다운로드할 수 있는 프로젝트 저장소 경로
<url>https://romankh3.github.io/image-comparison/</url>
- • 이 프로젝트가 배포되는 라이센스. 또한 둘 이상이 있을 수 있으므로 다음과 같이 설정해야 합니다.
<licenses> <license> <name>The Apache Software License, Version 2.0</name> <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url> </license> </licenses>
- • 프로젝트를 생성/생성 중인 개발자에 대한 정보:
<developers> <developer> <id>romankh3</id> <name>Roman Beskrovnyi</name> <email>roman.beskrovnyy@gmail.com</email> </developer> </developers>
- • 프로젝트에 액세스할 수 있는 방법을 설명하는 scm 블록:
<scm> <connection>git@github.com:romankh3/image-comparison.git</connection> <developerConnection>git@github.com:romankh3/image-comparison.git</developerConnection> <url>https://github.com/romankh3/image-comparison</url> </scm>
<dependencies>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>2.26.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.github.romankh3</groupId>
<artifactId>image-comparison</artifactId>
<version>4.3.0</version>
<scope>test</scope>
</dependency>
</dependencies>
여기에 테스트용 라이브러리 두 개를 추가했습니다. 이 라이브러리는 항상 필요합니다. 이미 알고 있듯이 종속성에는 범위 - 범위가 있습니다. 우리의 경우에는 테스트가 지정되었습니다 . 이는 기본 코드에서 이 종속성을 볼 수 없음을 의미합니다. 다음으로 모든 것을 아름답게 보이게 하려면 별도의 태그를 사용하여 <properties/> 버전을 표시할 수 있습니다 .
<properties>
<mockito.version>2.26.0</mockito.version>
<junit.version>5.5.2</junit.version>
<image.comparison.version>4.3.0</image.comparison.version>
</properties>
따라서 ${PROPERTY_NAME} 구성을 사용하여 종속성 블록을 업데이트할 수 있습니다 .
<dependencies>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>${mockito.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.github.romankh3</groupId>
<artifactId>image-comparison</artifactId>
<version>${image.comparison.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
다음에는 빌드 프로세스를 사용자 정의할 수 있는 중요한 <plugins/> 블록이 포함된 큰 <build/> 블록이 있습니다. 다음과 같이 <plugins/> 블록 내에 하나 이상의 플러그인을 추가할 수 있습니다.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
여기에서 maven-source-plugin 과 maven-javadoc-plugin이라는 두 개의 플러그인을 추가한 것을 볼 수 있습니다 . 각 플러그인에는 설정, 속성(매개변수)이 있어 플러그인을 사용자 정의할 수 있습니다. 이것은 미래에 우리에게 흥미로울 것입니다. 지금은 기억하고 넘어가겠습니다. 종속성과 동일한 방식으로 플러그인 버전을 <properties/> 에 넣습니다 . 이를 바탕으로 다음과 같은 메모리를 만들 수 있습니다.
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.github.javarushcommunity</groupId>
<artifactId>maven-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Maven Demo Project</name>
<url>https://github.com/javarushcommunity/maven-demo/</url>
<properties>
<mockito.version>2.26.0</mockito.version>
<junit.version>5.5.2</junit.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<source.plugin.version>3.2.0</source.plugin.version>
</properties>
<dependencies>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>${mockito.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>${source.plugin.version}</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>${javadoc.plugin.version}</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
메이븐 라이프사이클
Maven에는 Maven 수명주기와 같은 것이 있습니다. 이는 메이븐이 수행할 수 있는 일련의 작업이라고 말할 가치가 있습니다. Maven 수명주기 외에 다른 작업이 있을 수 있습니다. 무엇에 관한 것인가요? 프로젝트를 어셈블할 수 있는 명령 세트가 있습니다( 물론 영어로 된 트레이싱 페이퍼를 다시 빌드 하지만 이것이 없으면 아무데도 없습니다), Maven이 수집한 빌드를 삭제하고 Maven 로컬에 설치하여 다음을 수행할 수 있습니다. 로컬에서 프로젝트를 종속성으로 가져오는 등의 작업을 수행합니다. 이제 모든 것에 대해 더 자세히 이야기합시다. 이 팀들에 대한 내 의견을 쓰기 전에, 나는 그들이 이 문제에 대해 인터넷에 쓴 글을 읽기로 결정했고... 설명하기가 매우 어렵다는 것을 깨달았습니다. 작업을 위해서는 초기 작업을 위해서는 몇 가지 명령이 필요합니다 . 그것들을 설명해보자:- • 컴파일 — 프로젝트를 컴파일합니다. 이것이 첫 번째 단계입니다. 이 단계에서 프로젝트에 컴파일 오류가 있는지 확인할 수 있습니다. 때로는 IDEA에서 작업할 때 여러 가지 도약이 있기 때문에 존재하지 말아야 할 곳에 컴파일 문제가 나타나는 것입니다. 따라서 이 명령은 모든 i에 점을 찍습니다.
- • test - JUnit에서 실행되는 모든 테스트를 실행하며 Maven이 예상하는 위치에 있습니다( src/test/java 가 캡틴입니다).
- • package 는 이전 두 명령을 포함하는 다음 명령입니다. 즉, compile 명령이 먼저 패키지 내부에서 시작된 다음 test 명령이 컴파일된 프로젝트로 전송되고 모든 것이 정상이면 아카이브 생성이 시작됩니다. (< Packaging/>에서 선택한 아카이브))
- • 설치 - 머신에 Maven을 설치하면 프로젝트용으로 다운로드한 라이브러리를 저장하는 로컬 Git 저장소가 있습니다. 그러나 Maven의 장점은 설치 명령을 사용하여 프로젝트를 로컬 Git 저장소에 추가하고 프로젝트를 로컬에서 종속성으로 사용할 수 있다는 것입니다. 나를 믿지 못합니까? 시도해 보세요 :) 이렇게 하면 프로젝트가 다른 프로젝트에 종속된 것처럼 보이는지 빠르게 확인할 수 있습니다.
- • 배포는 이전에 있었던 모든 것의 정점입니다. 설치 시 로컬 저장소뿐만 아니라 액세스 권한이 있는 모든 사람이 종속성으로 사용할 수 있는 원격 저장소에도 프로젝트를 추가할 수 있는 기능을 제공하는 명령입니다.
- • verify - 모든 것을 확인하고 프로젝트 배포 준비가 되었는지 알려주는 명령입니다.
- • 정리 - 물론 컴파일된 파일과 아카이브는 어딘가에 저장되어야 합니다. Maven에는 이에 대한 대상 폴더가 있습니다 . 이는 프로젝트에 필요하지 않은 데이터입니다. 그리고 프로젝트를 다시 조립하기 전에 이전에 나온 모든 것을 삭제하는 것이 좋습니다. 이것이 clean 명령의 용도입니다 .
GO TO FULL VERSION