반응형

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' 카테고리의 다른 글

[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
[Maven] Maven 준비  (0) 2017.12.23

+ Recent posts