Programming/Java

Maven in 5 Minutes

라우드니스 2015. 1. 21. 13:33

http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

  • Prerequisites

그냥 computer에 설치할줄만 알면 된다

  • Installation

Maven은 java tool 이므로 꼭 Java가 설치돼있어야 한다.

첫번째, Maven을 다운로드 받고 installation instructions을 따라라. 그리고, cmd나 terminal에 다음을 쳐봐라

$ mvn -version

설치된 Maven 버전이 출력된다, 예를 들어:

Apache Maven 3.0.5
Maven home: /usr/share/maven
Java version: 1.7.0_72, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-7-oracle/jre
Default locale: ko_KR, platform encoding: UTF-8
OS name: "linux", version: "3.13.0-43-generic", arch: "amd64", family: "unix"

(* 공홈은 Windows 7 기준)

당신의 network setup에 따라서, 아마도 추가 설정이 필요할 지 모른다. 만약 필요하다면 Guide to Configuring Maven 을 확인해 봐라.

만약 당신이 Windows를 실행하고 있는중이라면, 당신이 Windows에서 Maven을 사용하기에 준비가 돼었는지 확인하기 위해 Windows Prerequisites를 보는것이 좋다.

  • Creating a Project

당신은 프로젝트가 위치할 어딘가가 필요할것이기에, 어딘가에 directory를 만들고 그 곳에서 shell을 실행해라. 당신의 command line에서, 다음 Maven goal을 실행해라:


$ mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false


만약 당신이 막 Maven 설치를 끝냈다면, 첫 실행을 수행할 것이다. 이것은 왜냐하면 maven은 대부분의 최근 artifacts들을 (plugin jars and other files) 당신의 local repository에 다운로드한다. 당신은 또한 이것이 끝나기 전에 몇번 command를 실행해야 할지도 모른다. 이것은 왜냐하면 당신의 다운로드가 끝나기 전에 remote server가 time out 됐기 때문이다. 걱정하지 말고, 그것을 수정하는 방법은 있다. (* 실제로 time-out 된적은 지금까지 maven을 사용하면서 한번도 없었다)

당신은 generate가 artifactId로 주어진 이름과 동일한 directory를 만들었다는것을 알아차릴 수 있을것이다. 그 directory로 옮겨보자.

$ cd my-app

이 directory 아래에서 당신은 표준 프로젝트 구성을 확인할 수 있을 것이다.

my-app
|-- pom.xml
`-- src
|-- main
| `-- java
| `-- com
| `-- mycompany
| `-- app
| `-- App.java
`-- test
`-- java
`-- com
`-- mycompany
`-- app
`-- AppTest.java

src/main/jara directory는 project의 source code를 가지고 있고, src/test/java directory는 test source를 가지고 있고 pom.xml은 project의 Project Object Model, or POM 이다.

  • The POM

pom.xml은 Maven의 project 설정의 core이다. 이것은 당신이 원하는 대로 project를 build하기에 필요한 주 정보들을 포함하고 있는 하나의 설정 파일이다. POM은 거대하고 그 복잡함에 겁을 먹을수도 있지만, 단지 효율적으로 사용하기에는 모든 복잡한 사항들을 이해할 필요는 없다. 이것은 project의 POM이다:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<name>Maven Quick Start Archetype</name>
<url>http://maven.apache.org</url>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

  • What did I just do?

당신은 Maven goal archetype:generate 를 실행했고, goal에 여러가지 parameter들을 보냈다. prefix archetype 은 goal을 포함하는 plugin 이다. 만약 당신이 Ant와 익숙하다면, 당신은 이것을 task와 비슷하다고 상상할 수 있다. 이 goal은 간단한 project를 archetype 위를 기반으로 만들었다. 지금은 plugin이 일반적인 보통 목적의 goals의 collection이라 말하기에 충분하다. 예를 들어, jboss-maven-plugin의 목적은 "다양한 jboss items를 처리하다" 이다.

  • Build the Project

$ mvn package

이 command는 다양한 action들을 출력할 것이고, 끝에는 다음과 같이 나온다:

...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Thu Jul 07 21:34:52 CEST 2011
[INFO] Final Memory: 3M/6M
[INFO] ------------------------------------------------------------------------

첫 command를 실행했을때와는 달리 (archetpye: generate) 당신은 두번째는 간단한 하나의 단어라는것을 알 수 있다. - package. goal 보다, 이것은 phase 이다. phase는 build lifecycle 중 하나의 step으로, 이것은 phases의 연속 sequence 이다. phase가 주어지면, Maven은 sequence에서 매 phase마다 실행할 것이고 ~~. 예를 들어, 만약 우리가 compile phase를 실행하면, phase들은 사실 상 다음과 같이 실행한다:

  1. validate
  2. generate-sources
  3. process-sources
  4. generate-resources
  5. process-resources
  6. compile

당신은 새롭게 compiled되고 packaged 된 JAR를 다음 command로 테스트할 수 있다:

java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App

이것은 다음 전형적인 것을 실행한다

 Hello World!

반응형