일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Python
- webflux
- Spring
- mybatis
- angularjs
- Java
- Eclipse
- 개발자 이야기
- javadoc
- jquery
- JavaFX
- node.js
- php
- SQL
- bootstrap
- pdo
- spring boot
- RSocket
- maven
- 일본
- 외국인 노동자
- build tool
- WebClient
- Linux
- Apache
- xml
- Ajax
- SQLite
- swift
- gradle
- Today
- 122
- Total
- 3,456,555
슬기로운 개발자 생활
[Maven] Maven 프로젝트 작성 본문
Maven에서 개발을 하려면 "프로젝트"를 작성해야 한다. 이 프로젝트에 대해 설명한다.
프로젝트 생성(archetype:generate)
Maven에서 개발한다면, 먼저 해야 하는 것은 "프로젝트 생성"이다. 이것은 Maven 명령을 사용한다.
명령 프롬프트 또는 터미널을 시작하고, 프로젝트를 만들 위치에 현재 디렉토리를 이동한다. "cd 작업디렉토"라고 입력하면 작업 디렉토리로 이동한다. 그러고 다음과 같이 명령을 실행한다.
$ mvn archetype:generate
잠시 기다리고 있으면, 긴 텍스트가 출력될 것이다. 이것은 사용 가능한 프로젝트 템플릿의 목록이다. 1000개 이상이기 때문에, Maven에 익숙하지 않다면 무시해도 된다.
$ mvn archetype:generate
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:2.2:generate (default-cli) > generate-sources @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:2.2:generate (default-cli) < generate-sources @ standalone-pom <<<
[INFO]
[INFO] --- maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Interactive mode
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
1: remote -> am.ik.archetype:maven-reactjs-blank-archetype (Blank Project for React.js)
2: remote -> am.ik.archetype:msgpack-rpc-jersey-blank-archetype (Blank Project for Spring Boot + Jersey)
3: remote -> am.ik.archetype:mvc-1.0-blank-archetype (MVC 1.0 Blank Project)
...중략...
2012: remote -> us.fatehi:schemacrawler-archetype-plugin-lint (-)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 1095:
그대로 Enter 또는 Return 키를 누르면, maven-archetype-quickstart라는 템플릿이 선택된다.
이것은 Maven으로 프로젝트를 만들 때 퀵 스타트 템플릿이다. Maven으로 프로젝트를 만들 때에 가장 기본이 되는 것이다. 이 maven-archetype-quickstart를 선택하면 차례로 프로젝트 정보를 입력하라고 나오는데 차근히 입력을 하면 된다.
maven-archetype-quickstart 버전
Choose org.apache.maven.archetypes : maven-archetype-quickstart version :
1 : 1.0-alpha-1
2 : 1.0-alpha-2
3 : 1.0-alpha-3
4 : 1.0-alpha-4
5 : 1.0
6 : 1.1
Choose a number : 6 :
먼저 maven-archetype-quickstart 버전을 묻는다. 디폴트로 최신 버전이 선택되어 있기 때문에 그대로 Enter 또는 Return을 누른다.
그룹 ID
Define value for property 'groupId': :
그룹 ID라는 프로젝트를 생성하는 개인 또는 단체를 의미 ID이다. 여기에서는 예제로 com.devkuma라고 입력할 것이다.
아티팩트 ID
Define value for property 'artifactId':
아티팩트 ID는 만드는 프로젝트의 ID이다. 개발 프로그램에 할당되는 ID라고 생각하면 된다. 여기에서는 예제로 SampleMavenApp라고 입력한다.
버전
Define value for property 'version': 1.0-SNAPSHOT :
프로그램의 버전을 지정한다. 기본적으로 "1.0-SNAPSHOT"라고 되어 있기 때문에, 이것은 그대로 할 것이기에, 아무것도 입력하지 않고 Enter 또는 Return를 누룬다.
패키지
Define value for property 'package': com.devkuma :
프로그램을 배치할 패키지를 지정한다. 디폴트로 그룹 ID가 그대로 설정되어 있는 것이다. 특히 문제가 없으면 그대로 Enter 또는 Return를 누른다.
입력 확인
Confirm properties configuration :
groupId : com.devkuma
artifactId : SampleMavenApp
version : 1.0-SNAPSHOT
package : com.devkuma
Y :
지금까지 입력한 내용이 표시된다. 문제가 없으면 그대로 Enter 또는 Return를 누르면 프로젝트를 만들어진다. 문제가 있는 경우는 "n"을 입력하고 Enter/Return를 누르면 다시 입력 할 수 있다.
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.1
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Value: /Users/kimkc/dev/mvn
[INFO] Parameter: package, Value: com.devkuma
[INFO] Parameter: groupId, Value: com.devkuma
[INFO] Parameter: artifactId, Value: SampleMavenApp
[INFO] Parameter: packageName, Value: com.devkuma
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: /Users/kimkc/dev/mvn/SampleMavenApp
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 04:05 min
[INFO] Finished at: 2017-12-11T22:56:34+09:00
[INFO] Final Memory: 11M/143M
[INFO] ------------------------------------------------------------------------
프로젝트 구성
프로젝트가 생성되면 커멘드를 실행한 작업 폴더에 "SampleMavenApp"라는 폴더가 생성된다. 이 프로젝트의 폴더이다.
이 폴더 안에 폴더나 파일이 생성하게 된다. 그 구성을 정리하면 다음과 같다.
SampleMavenApp 폴더
$ tree
.
├── pom.xml
└── src
├── main
│ └── java
│ └── com
│ └── devkuma
│ └── App.java
└── test
└── java
└── com
└── devkuma
└── AppTest.java
프로젝트를 열면 src 폴더와 pom.xml 파일이 있다. src 는 만드는 프로젝트에서 사용하는 다양한 파일들를 모아 두는 곳이다. 프로젝트에서 사용하는 파일은 모든 이 안에 보관된다. pom.xml은 "빌드 파일"이라는 것이다(이에 대해서는 다시 설명하겠다).
src 폴더에는 main폴더와 test폴더가 있다. main에는 메인 프로그램 폴더로써, 이 안에 프로젝트의 프로그램 관계의 소스 코드 등이 배치된다. Java 소스 코드는 이 중 java 폴더에 저장된다.
test 폴더에는 테스트 관련 폴더로써, 이 가운데 java 폴더가 있고 거기에 테스트 패키지와 소스 코드 파일을 배치한다. main과 test에는 어느쪽에도 언어 이름의 폴더(여기에서는 java 폴더)가 있고, 그 안에 패키지의 폴더가 있고, 소스 코드 파일이 배치되어 있는 동일한 구성으로 되어 있다.
패키지와 소스 코드 파일
main 폴더에 있는 java 폴더 안에는 예제로서 Java 소스 코드 파일이 들어 있다. 폴더를 열면 com, devkuma라는 폴더가 있고, 그 안에 App.java 라는 파일이 있다.
폴더의 구성을 보면 알 수 있듯이, com.devkuma는 패키지의 폴더이다. 앞에서 프로젝트를 만들 때, package: com.devkuma 입력을 했었다. 그러면 com.devkuma 패키지에 샘플 소스 코드 파일이 배치된다. 새로운 프로그램을 만드는 경우 이 폴더에 소스 코드 파일을 배치하면 된다라는 것이다.
프로그램 생성(mvn package)
그럼 프로젝트를 컴파일하고 프로그램을 만들어 보자. 여기에는 몇 가지 방법이 있지만 가장 쉬운 방법은 패키지 생성 명령을 사용하는 것이다.
명령 프롬프트 또는 터미널에서 cd SampleMavenApp
을 실행하고 SampleMavenApp 폴더에 이동한다. 그리고 다음 명령을 실행한다.
mvn package
실행이 완료되면 프로그램을 컴파일하고 Jar 파일을 만든다. 이 package은 Maven의 "골(Goal)"이라고 한다. 아무튼 현재는 "mvn package 패키지를 만드는 방법"이라고만 이해한다.
명령을 실행하면 매우 긴 메시지가 출력된다. 최후에 다음과 같은 출력이 되었다면 문제없이 Jar 파일이 생성이 된 것이다.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ SampleMavenApp ---
[INFO] Building jar: /Users/kimkc/dev/mvn/SampleMavenApp/target/SampleMavenApp-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 6.122 s
[INFO] Finished at: 2017-12-11T23:57:15+09:00
[INFO] Final Memory: 15M/141M
[INFO] ------------------------------------------------------------------------
또한, 이 출력 직전에 다음과 같은 출력이 되는 것을 볼 수 잇을 것이다.
T E S T S
-------------------------------------------------------
Running com.devkuma.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
이는 단위 테스트가 실행된 결과 출력이다. Maven 프로젝트에는 샘플 소스 코드 파일과 동시에 그 소스 코드 파일을 테스트하는 단위 테스트를 위한 소스 코드 파일도 생성된다. 빌드 시에는 준비된 단위 테스트 프로그램을 사용하여 테스트를 실행하고 문제가 없으면 패키지 작성을 할 수 있게 되어있다.
프로그램 실행
package를 한 후에는 프로젝트 폴더를 열어 보자. 새롭게 target이라는 폴더가 생성되어 있을 것이다. 이것을 열어 보면, 이 중에는 "SampleMavenApp-1.0-SNAPSHOT.jar"라는 파일이 저장되어 있다. 이것이 빌드하여 생성된 Jar 파일이다.
그럼 이 파일을 실행해 보자. 명령 프롬프트 또는 터미널에서 "cd target"을 실행하고 "target" 디렉토리로 이동한다. 그리고 다음과 같이 실행한다.
$ java -classpath SampleMavenApp-1.0-SNAPSHOT.jar com.devkuma.App
이는 SampleMavenApp-1.0-SNAPSHOT.jar에서 com.devkuma.App 클래스를 실행한다. 그 바로 아래에 다음과 같이 텍스트가 출력되는 것이다.
Hello World!
이것이 com.devkuma.App 클래스의 실행 결과이다. App.java 소스 코드 파일이 어떻게 되어 있는지 살펴보면 아래와 같이 작성되어 있는지 알 수 있다.
package com.devkuma;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}
Jar 자체로는 실행되지 않는다.
그런데 생성된 Jar 파일을 실행하는 데 -classpath에 Jar 파일을 지정하고, 메인 클래스를 지정하는 것은 최근 좀 처럼 볼 수 없는 고전적인 방식이다.
사실 mvn package으로 생성된 Jar 파일은 실행 가능한 Jar는 아니다. 따라서 이러한 귀찮은 방식을 하지 않으면 안된다.
사실은 프로젝트 빌드 및 실행은 좀 알기 쉬운 방식도 제공된다. 다만, 거기에는 전용 플러그인을 제공해야 한다. 이는 나중에 설명하도록 하겠다. 그 전까지는 "mvn package 패키지를 만들고, java -classpath에서 실행한다"는 방식으로 동작 체크를 한다.
메이븐 골(goal)
앞에서 프로그램을 작성하고 실행까지 할 수 있었다. 여기에서 앞에서 가볍게 통과 한 "골"에 설명한다.
Maven goal에 대해
프로그램을 빌드하기 위해 "mvn package"라는 명령을 실행했다. 이 "package"라는 것이 골(goal)이라는 것이라고 앞에서 언급을 했었다. (골은 목표라고 해석된다)
골이라는 것은 Maven에서 "처리의 역할"을 나타낸다. Maven은 어떤 역할 처리를 실행시킬 것인지를 지정한다. 이것이 골이다.
먼저 프로젝트를 만들 때, mvn archetype:generate
라고 명령을 실행했었다. 이것도 "archetype:generate"라는 골을 지정하여 실행한 것이다. (정확하게는 archetype은 플러그인으로 플러그인의 generate라는 목표를 실행하는 것이다)
Maven은 뭔가를 할 때, 먼저 "무엇을 할 것인가"를 명확하게 한다 (이것이 골이다). 그리고 그것을 실행하는데 필요한 인수와 정보를 입력하면, 지정된 골에 대한 처리가 실행된다. 어떤 골이 있는지를 알아야 것도 Maven을 이해하기 위해 필요하다.
우선, 지금의 단계에서는 기본 골인 다음의 것만 알아두기로 한다.
package
이미 사용했던 것으로 패키지를 생성하기 위한 것이다. 이것은 이후에 compile, test-compile, test도 내부에서 모든 실행한다.
compile
프로그램을 컴파일한다. 그러나 Jar 파일은 생성하지 않는다.
test-compile
테스트 프로그램을 컴파일한다. 이는 src 에서 test 폴더에 있는 소스 코드를 컴파일한다.
test
테스트를 실행한다. 이것은 src 에서 test 폴더에 준비한 테스트 프로그램을 실행한다.
clean
컴파일에서 생성된 각종 파일을 모두 삭제한다. 컴파일으로 만든 불필요한 파일을 지우고 싶을 때 사용한다.
이 외에도 골은 여러가지 있다. 또한 archetype:generate처럼 플러그인으로 추가되는 골도 있다. 이외의 것은 필요하게 되는 시점에 순차적으로 설명하겠다.
'IT 개발 > Maven' 카테고리의 다른 글
[Maven] Web 응용 프로그램 개발 (0) | 2017.12.23 |
---|---|
[Maven] Java 응용 프로그램 개발 (0) | 2017.12.23 |
[Maven] pom.xml 파일 기본 (0) | 2017.12.23 |
[Maven] Maven 빠르게 시작(퀵 가이드) (0) | 2017.12.23 |
[Maven] Maven 준비 (0) | 2017.12.23 |