2020-10-5 메이븐 기초(2) - 프로젝트 생성
프로젝트 생성
-
메이븐 프로젝트를 생성하기 위해서는 프로젝트 디렉토리에서 mvc archetype:generate명령어를 입력한다.
-
Choose a number: 8: Define value for property 'groupId': me.jimmy Define value for property 'artifactId': mavenStudy Define value for property 'version' 1.0-SNAPSHOT: : Define value for property 'package' me.jimmy: : Confirm properties configuration: groupId: me.jimmy artifactId: mavenStudy version: 1.0-SNAPSHOT package: me.jimmy
-
groupId : 프로젝트를 생성하는 개인 또는 단체.
-
artifactId : 프로젝트 ID. 개발프로젝트에 할당되는 ID
-
버전 : 프로그램 버전. default로 1.0-SNAPSHOT으로 되어있다.
- 패키지 : default로 groupId가 되어있다.
-
.
├── pom.xml
└── src
├── main
│ └── java
│ └── me
│ └── jimmy
│ └── App.java
└── test
└── java
└── me
└── jimmy
└── AppTest.java
- 위와 같은 구조로 프로젝트가 생성된 것을 확인할 수 있다.
- src : 프로젝트에서 필요한 파일들을 모아둔 곳이고, pom.xml은 빌드파일을 지칭한다.
- src디렉토리는 main, test로 구별되는데 작성하는 소스코드는 main에 테스트코드는 test폴더에 작성하면 된다.
프로그램생성(mvn package)
-
pom.xml이 있는 루트 디렉토리에서 mvn package를 생성하면 컴파일하고 Jar파일을 생성한다.
-
컴파일하고 빌드할때 기본적으로 테스트들을 실행시킨다.
-
[INFO] ------------------------------------------------------- [INFO] T E S T S [INFO] ------------------------------------------------------- [INFO] Running me.jimmy.AppTest [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.027 s - in me.jimmy.AppTest [INFO] [INFO] Results: [INFO] [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO]
-
프로그램 실행
-
packaging을 하면 target디렉토리가 생성된다. 내부에 mavenStudy-1.0-SNAPSHOT.jar와 같은 jar파일이 존재하는데, 빌드된 jar파일이다.
-
$java -classpath mavenStudy-1.0-SNAPSHOT.jar me.jimmy.App
- jar파일 자체만으로 실행되지 않는다. -classpath로 jar파일을 지정하고, main클래스를 지정해야한다. 전용 플러그인을 제공하면 main클래스를 따로 지정하지 않아도 된다.
maven goal
- mvn package를 통해 프로그램을 빌드했다. 이때 package를 goal이라고 한다.
- 메이븐에서 goal은 “처리의 역할”을 의미한다. 이전에 mvn archetype:generate 명령어 역시 archetype플러그인의 generate라는 골을 실행한거다.
- 메이븐의 goal
- package : 패키지를 생성하기 위한 것. compile, test-compile, test도 내부에서 실행
- compile : 컴파일, 하지만 jar 파일은 생성안한다.
- test-compile : 테스트 프로그램 컴파일한다. src/test에 있는 소스코드를 컴파일
- test : 테스트를 실행. src/test에 있는 테스트를 실행
- clean : 컴파일에서 생성된 파일을 모두 삭제.
pom.xml
-
메이븐 커맨드를 입력해서 프로젝트를 만들거나 빌드가 가능하다. 메이븐이 의존성을 모두 중앙에서 관리하지만 프로젝트 관리를 위해서는 빌드파일을 이해해야한다.
-
pom.xml의 pom => Project Object Model
-
<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.devkuma</groupId> <artifactId>SampleMavenApp</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>SampleMavenApp</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
- pom.xml은 project태그 내에서 모든 정보를 기술한다. project뒤에 있는 xmlsn와 같은 기타 속성들은 정해진 값?으로 볼 수 있다.
-
프로젝트 기본속성 : project태그에는 아래와 같은 기본 속성태그들이 존재한다.
- <modelversion> : pom 모델의 버전. 4.0.0으로 명시하자.
- <groupId> : 그룹Id로 프로젝트에서 제작자,회사 프로젝트를 식별하기 위해 사용
- <artifactId> : 프로젝트 고유한 Id
- <version> : 프로그램 버전. 보통 1.0-SNAPSHOT이 기본으로 설정된다.
- <packaging> : 패키징의 종류. jar 혹은 zip으로 설정한다. 웹애플리케이션은 war도 지정한다.
- <name> : 프로그램 이름. 보통 artifactId를 그대로 쓴다.
- <url> : 프로젝트와 관련된 url
-
<properties> : 프로젝트와 관련된 속성들. 보통 project.build.sourceEncoding만 포함.
-
<dependencies> : 의존성들을 모아둔 태그. 자바 기본 라이브러리는 제외한다.
-
의존성이 계층적으로 구성되어있기때문에 전체를 <dependencies>로 감싸고 하위에 <dependency>를 명시한다.
-
<dependency> : 라이브러리 정보를 기술한다.
- groupId, artifactId,version는 위의 설명과 유사하지만 scope가 존재한다.
- <scope> : 라이브러리가 이용되는 범위를 지정한다. runtime, test와 같은 범위가 존재한다.
느낀점
- 메이븐 명령어를 잘 몰랐고, groupId, artifactId도 헷갈렸고, dependencies내부에 있는 dependency를 제외하고 다른 태그들이 어떤 의미를 가지고 있는지 잘몰랐다. 잘 정리해둔 글을 참조해서 명령어들을 하나하나 입력하면서 어떻게 프로젝트가 생성되는지 확인할 수 있었다. 스프링 개발을 하다보면 plugin들을 설정하고 pom.xml에서 다양한 설정들을 하게 되는데, 다음번에는 의미를 이해할 수 있을거 같다.
Reference
- http://www.devkuma.com/books/pages/102