Maven 프로젝트 생성
1. mvn archetype:generate
- groupId - 프로젝트 속하는 그룹 식별 값. 회사, 본부, 또는 단체를 의미하는 값이 오며, 패키지 형식으로 계층을 표현한다. 위에서는 net.madvirus를 groupId로 이용하였다.
- artifactId - 프로젝트 결과물의 식별 값. 프로젝트나 모듈을 의미하는 값이 온다. 위에서는 sample을 artifactId로 이용하였다.
- version - 결과물의 버전을 입력한다. 위에서는 기본 값인 1.0-SNAPSHOT을 사용하였다.
- package - 기본적으로 생성할 패키지를 입력한다. 별도로 입력하지 않을 경우 groupId와 동일한 구조의 패키지를 생성한다.
mvn archetype:generate
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
...생략
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)
...생략
1090: remote -> org.apache.maven.archetypes:maven-archetype-portlet (An archetype which contains a sample JSR-268 Portlet.)
1091: remote -> org.apache.maven.archetypes:maven-archetype-profiles (-)
1092: remote -> org.apache.maven.archetypes:maven-archetype-quickstart (An archetype which contains a sample Maven project.)
...생략
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 1092: [엔터]
Choose 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: [엔터]
Define value for property 'groupId': : com.example.app
Define value for property 'artifactId': : app
Define value for property 'version': 1.0-SNAPSHOT: : [엔터]
Define value for property 'package': com.example.app: : [엔터]
Confirm properties configuration:
groupId: net.madvirus
artifactId: sample
version: 1.0-SNAPSHOT
package: net.madvirus
Y: : [엔터]
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.1
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: net.madvirus
[INFO] Parameter: packageName, Value: net.madvirus
[INFO] Parameter: package, Value: net.madvirus
[INFO] Parameter: artifactId, Value: sample
[INFO] Parameter: basedir, Value:
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 25:52 min
[INFO] Finished at: 2014-07-02T15:17:56+09:00
[INFO] Final Memory: 12M/111M
[INFO] ------------------------------------------------------------------------
2. tree 확인
tree
.
├─app
│ ├─src
│ │ ├─main
│ │ │ └─java
│ │ │ └─com
│ │ │ └─example
│ │ │ └─app
│ │ └─test
│ │ └─java
│ │ └─com
│ │ └─example
│ │ └─app
│ └─target
│ ├─classes
│ │ └─com
│ │ └─example
│ ├─generated-sources
│ │ └─annotations
│ └─maven-status
│ └─maven-compiler-plugin
│ └─compile
│ └─default-compile
- src/main/java - 자바 소스 파일이 위치한다.
- src/main/resources - 프로퍼티나 XML 등 리소스 파일이 위치한다. 클래스패스에 포함된다.
- src/main/webapp - 웹 어플리케이션 관련 파일이 위치한다. (WEB-INF 폴더, JSP 파일 등)
- src/test/java - 테스트 자바 소스 파일이 위치한다.
- src/test/resources - 테스트 과정에서 사용되는 리소스 파일이 위치한다. 테스트 시에 사용되는 클래스패스에 포함된다.
3. 자바 버전 변경
<!--pom.xml-->
.
.
.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
자바 프로젝트 컴파일
mvn compile
- 빌드 절차
- 소스 파일 컴파일
- 단위 테스트 수행
- .jar 아카이브 파일 생성
- 실행과 관련된 파일 생성
- .tar, .zip 배포 파일 생성
- /build/distributions/에 배포파일이 생긴다.
├── build
│ ├── distributions
│ │ ├── bitcamp-java-project.tar <== Unix/Linux 사용자에게 배포하는 파일
│ │ └── bitcamp-java-project.zip <== Windows 사용자에게 배포하는 파일
배포 파일의 압축을 플고 그 안의 스크립트 파일을 실행해보자.
➜ distributions git:(master) ✗ tar -xvf *.tar <== 압축파일 푸는 명령어 ➜ distributions git:(master) ✗ cd bitcamp-java-project ➜ bitcamp-java-project git:(master) ✗ tree . ├── bin │ ├── bitcamp-java-project │ └── bitcamp-java-project.bat └── lib ├── bitcamp-java-project.jar ├── checker-qual-2.11.1.jar ├── error_prone_annotations-2.3.4.jar ├── failureaccess-1.0.1.jar ├── guava-29.0-jre.jar ├── j2objc-annotations-1.3.jar ├── jsr305-3.0.2.jar └── listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar
2 directories, 10 files ➜ bitcamp-java-project git:(master) ✗ cd bin ➜ bin git:(master) ✗ ./bitcamp-java-project <== 스크립트 파일 실행 Hello world. 이때 Windows os의 경우 bat파일을 실행한다. 특히 우리가 만든 app.class 가 lib안의 bitcamp-java-project.jar에 있다. 여기에 있는 app.class를 실행하는 명령어가 bin에 있는 거!!! => 이게 바로 shell script이다. 이 스크립트는 고객 컴퓨터가 어떤지 모르니까 모든 경우의 수를 다 따져봐서 실행할 수 있게 만들어졌다. 개발자라면 그냥 jvm의 java 명령어로 실행할 수 있겠지만 빌드는 일반 사용자를 위해 배포파일을 만드는 과정이다. gradle clean: 빌드한 걸 삭제하는 명령어