레이블이 Eclipse Tip인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Eclipse Tip인 게시물을 표시합니다. 모든 게시물 표시

2017년 6월 16일 금요일

아파치 메이븐(Apache Maven) 시작하기

Apache Maven 프로젝트는 Java 어플리케이션의 빌드 과정을 간략화하기 위해 시작된 프로젝트이다. 그 전까지는 Apache Ant 를 이용해서 빌드 했는데, 이 경우에 여러개의 섭프로젝트로 이뤄진 하나의 프로젝트를 진행할 때 각 섭프로젝트가 서로 다른 Ant 빌드 파일을 가지고, 빌드된 JAR 파일들이 만들어지게 된다. Apache 개발팀은 프로젝트를 빌드하는데 있어 프로젝트의 구성 정보를 확실하게 전달하고, 여러 프로젝트에서 쉽게 JAR 파일을 공유할 수 있는 방식의 필요성을 느꼈고, 그에 대한 결과물로 Maven 이 탄생하게 된다. 그러니까 Maven은 기존의 "Ant + @기능들" 이라 생각하면 된다.

Maven을 우선 설치해야 공부하니까 설치하자. 가장 최신버젼은 3.5 버젼이고, 3.3 버젼 이상부터는 JDK 1.7이상이 설치되어있어야 한다. 설치가 안되있다면 [Java] 자바 시작하기(개발 환경 구성) 글을 보고 설차하도록 하자.

그리고 "JAVA_HOME" 이라는 환경변수 설정을 해주자. 위 글을 보고 따라하는 Ubuntu 사용자의 경우에는 나와 같은 위치에 설치했을테니 쉘을 열고 아래와 같이 타이핑하면 된다. 아니면 각기 jdk 설치한 위치로 하자. 윈도우 사용자의 경우에는 내컴퓨터 옵션에서 환경변수를 설정하자.

export JAVA_HOME= /opt/java/jdk1.8 #jdk폴더위치

그리고 나서는 https://maven.apache.org/download.cgi에 들어가 Maven 파일을 다운로드 해주자. 영어로 복잡하게 많겠지만 Link 칼럼에 있는것중에 Binary Archive를 다운받으면 된다. Source라 적힌것들은 직접 개발할때 쓰라는거다.

나의 경우에는 3.5버젼 apache-maven-3.5.0-bin.tar.gz 파일을 받았다. 다운 다 했으면 설치할 위치에 압축 풀고 놔주자. 편한데 놔두면 된다. 나는 /opt 폴더에 놔뒀다.

그리고 maven 폴더의 bin 폴더를 $PATH 변수에 추가해주면 된다. 그리고 쉘에서 mvn -v 명령어를 실행해주면 아래와 같은 결과가 나오고, 그러다면 설치가 완료된것이다.


user@user-desktop:~$ mvn -v
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T04:39:06+09:00)
Maven home: /opt/apache/apache-maven
Java version: 1.8.0_112, vendor: Oracle Corporation
Java home: /opt/java/jdk1.8/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.4.0-79-generic", arch: "amd64", family: "unix"

설치를 완료했다면 프로젝트를 하나 만들어보자. 아래 명령어를 실행해준다


user@user-desktop:~$ mvn archetype:generate 
# 첫 실행시 필요한 플러그인들과 파일들을 다운받는라 좀 오래걸릴거다.

Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 984: #그냥 엔터치면 기본값으로 설정된다
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: #마찬가지, 엔터
Define value for property 'groupId': com.muckycode.app
Define value for property 'artifactId': maven-tutorial
Define value for property 'version' 1.0-SNAPSHOT: : #엔터
Define value for property 'package' com.muckycode.app: : #엔터
Confirm properties configuration:
groupId: com.muckycode.app
artifactId: maven-tutorial
version: 1.0-SNAPSHOT
package: com.muckycode.app
 Y: : y #설정을 확인하고 맞으면 y를 쳐주자, 그리고 나면 아래와 같이 빌드가 만들어졌다는 문장들을 볼수있을거다.
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.1
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Value: /home/user
[INFO] Parameter: package, Value: com.muckycode.app
[INFO] Parameter: groupId, Value: com.muckycode.app
[INFO] Parameter: artifactId, Value: maven-tutorial
[INFO] Parameter: packageName, Value: com.muckycode.app
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: /home/user/maven-tutorial
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:26 min
[INFO] Finished at: 2017-06-16T10:58:19+09:00
[INFO] Final Memory: 18M/200M
[INFO] ------------------------------------------------------------------------

Maven에 의해 생성된 프로젝트 폴더로 가보자. basedir내부에 artifactID폴더에 있을거다. 폴더 내부 구성을 보게되면


user@user-desktop:~/maven-tutorial$ ls -LR
.:
pom.xml  src

./src:
main  test

./src/main:
java

./src/main/java:
com

./src/main/java/com:
muckycode

./src/main/java/com/muckycode:
app

./src/main/java/com/muckycode/app:
App.java

./src/test:
java

./src/test/java:
com

./src/test/java/com:
muckycode

./src/test/java/com/muckycode:
app

./src/test/java/com/muckycode/app:
AppTest.java

기본적으로 maven은 프로젝트 폴더안에 pom.xml, Project Object Model 파일인데, 프로젝트의 구성정보를 전달하는 파일이다.
그리고 src 폴더안에 main 폴더와 test 폴더를 생성하고, 각 폴더 내부에 java 폴더를 생성, java 폴더 내부는 groupID에 입력했던 패키지 형식 계층으로 폴더가 구성된다.
위는 maven-archetype-quickstart라는 archetype을 선택(기본값이다)했을때이고 다른 옵션을 정하면 그에 따라 만들어진다.
Maven에서 소개하는 기본 디렉토리 구조는 아래와 같다. 혹시 이 중에 필요하나 안만들어진게 있다면, 직접 폴더를 만들면 된다.


디렉토리설명
src/main/java자바 소스 파일
src/main/resources리소스 파일
src/main/filters리소스 필터 파일
src/main/webapp웹앱 소스 파일
src/test/java테스트 소스 파일
src/test/resources테스트 리소스 파일
src/test/filters테스트 리소스 필터 파일
src/it확장(Integration) 테스트(플러그인용)
src/assemblyAssembly descriptors
src/siteSite
LICENSE.txt프로젝트 라이센스
NOTICE.txtNotice 파일
README.txtreadMe 파일

위의 폴더 구조와 내부 파일 설명은 Maven 규칙이기도 하니 잘 지켜주자. 모든 자바 소스 파일들은 src/main/java 폴더에 존재해야하며, 모든 테스트 소스 파일들은 src/test/java 폴더에 존재해야하고, 같은 방식으로 리소스들은 resources 폴더에 저장된다. 또 필수사항은 아니지만, 소스파일들은 groupId와 같은 패키지 구조를 가지는게 좋고, 기본적으로 만들어지는 App.java, AppTest.java 파일은 Maven 작동 테스트를 위한것임을 알아두자.

기본적으로 Maven 설치는 최소한의 Maven 기능만 설치한다. 추가기능들은 모드 plug-in 방식으로 제공되며, plug-in의 이름만 주어지면, Maven이 알아서 다운받고 설치한다. 위 프로젝트 생성의 경우에는 Maven이 archetype이라는 플러그인을 다운받았고, archetype 플러그인이 의존하는 다른 플러그인까지 알아서 다 다운받았다. 이런 플러그인들은 로컬에 저장되며, 한번 다운받았으면 다시 다운받을 필요 없다.

자 그러면 다시 우리 프로젝트 폴더로 이동해서 mvn package 명령어를 실행해주자. 그럼 아까와 같이 플로그인 다운로드가 끝난이후 아래와 같은 결과를 보게 될것이다.
설명하자면, mvn package 명령에서 package 파라미터는 build 사이클의 한 단계(Phase)를 의미한다. 각 phase 들은 개별 플러그인이며, 이 플러그인들이 실행하는 하나의 행위들을 goal이라고 표현한다. 예를들어 package 단계의 어떤 goal을 실행하고 싶다면 mvn package:anygoal 이런식을 콜론을 이용해서 명령어를 만들어주면 된다. 각 단계는 실행되기위해 그 전단계들의 실행을 필요로 한다. 그렇기 때문에 이 경우에, 우리는 package 단계를 실행했고, 그 전 단계인 Validate, Compile, Test 단계가 다 실행되고 Package단계가 실행된다. 물론 Validate, Compile, Test 단계모두 각각 실행 할 수도 있다.

  • Validate - pom.xml 파일을 조회해 프로젝트 구성과, 필요 정보에 이상 없나 확인한다.
  • Compile - 소스파일을 컴파일한다
  • Test - 테스트 소스를 컴파일하고 테스트 프레임워크를 실행해 테스트한다
  • Package - pom.xml 파일에 설정된 포맷으로 프로젝트를 패키징한다. 여기서는 jar 포맷이다.


user@user-desktop:~/maven-tutorial$ mvn package
[INFO] Scanning for projects...

[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] Building maven-tutorial 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------

################################################################################
# Validate 단계
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven-tutorial ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/user/maven-tutorial/src/main/resources
[INFO] 

################################################################################
# 메인 소스 파일 변경을 감지하고 새로 컴파일한다 - Compile 단계
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ maven-tutorial ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /home/user/maven-tutorial/target/classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ maven-tutorial ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/user/maven-tutorial/src/test/resources
[INFO] 

################################################################################
# 테스트 소스 파일 변경을 감지하고 새로 컴파일한다
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ maven-tutorial ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /home/user/maven-tutorial/target/test-classes

################################################################################
# 테스트를 진행한다 - Test 단계
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ maven-tutorial ---
[INFO] Surefire report directory: /home/user/maven-tutorial/target/surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.muckycode.app.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

################################################################################
# 테스트 결과가 이상 없고, 마지막 단계인 package 단계를 실행하고 jar 파일을 생성한다.
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ maven-tutorial ---
[INFO] Building jar: /home/user/maven-tutorial/target/maven-tutorial-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.654 s
[INFO] Finished at: 2017-06-16T13:13:28+09:00
[INFO] Final Memory: 17M/195M
[INFO] ------------------------------------------------------------------------

여기까지가 CLI로 Maven을 이용하는 법이다. 근데 아마 대부분의 개발자들은 본인 취향의 IDE를 이용해 할것이니, 조금만 더 힘을내서 Maven과 Eclipse 연동하는 법을 알아보도록 하자.

Eclipse IDE는 Maven을 자체 내장해서 나온다. 엥 그면 위에서 설치 괜히한거~는 아니고, Eclipse 내장 Maven말고 별도로 설치한 다른 버젼의 Maven과도 연동할 수 있으니 타버젼 Maven을 사용하고 싶으면 아래와 같은 방법으로 하면 된다.

우선 Help 메뉴에서 About Eclipse를 클릭하게되면 아래와 같은 창이 보일것이다.

About Eclipse 창

그림에서 빨간 사각형 안에 들어가있는 m2라고 적힌 버튼이 보이는가, 그게 바로 Eclipse Maven 플러그인이다. 클릭하면 자세한 정보도 볼 수 있다. 만약 안보인다면 Eclipse 플러그인 검색으로 설치해주자.

설치가 되있는것을 확인했으면 Window 메뉴에서 Preferences 창으로 들어간다음 Maven 검색후 Installations 를 클릭해준다.

Eclipse Preference Maven Installations 창

그면 위와같은 창을 보게 될텐데, 우선은 내장 Maven을 사용하고 있기에 Embedded에 체크되있다. 옆의 Add 버튼을 눌러 위에서 설치했던 최신버젼의 Maven을 추가해주자.

Eclipse Maven Runtime 추가창

올바른 디렉토리를 추가해주고 적당한 이름도 붙여주기만 하면 끝난다. 그럼 아까 그 창이 아래와 같이 변하게 되고, 체크박스만 바꿔주면 연동이 완료된다.

추가 완료 후 Maven Installations 창

새로운 Maven 프로젝트를 생성해보자. File - New-Maven Project를 선택하면 아까 CLI로 했던 과정을 쉽게 할 수 있다.

Eclipse New Maven Project 창 - 01

Create a simple project(skip archetype selection) 을 선택해주자, 아까처럼 복잡한 옵션을 건너뛰고 기본값으로 프로젝트를 생성시켜 준다. 다음을 누르면

Eclipse New Maven Project 창 - 02

CLI랑 별 다른건 없다. 프로젝트 설정을 완료해주고, 완료를 누르면 패키지 탐색기에 새로운 프로젝트가 추가된다.

Eclipse m2 플러그인은 Maven을 통해 위 과정을 완료하기때문에, CLI와 과정이나 결과로 별달리 차이가 없다.

이미 생성된 프로젝트를 가져오기 위해서는 File - Import 에서 Existing Maven Project 선택 후 프로젝트 디렉토리 위치를 입력하면 된다. pom.xml 파일을 통해 프로젝트를 구성하기 때문에 pom.xml 파일에 입력된 설정, 의존성(Dependency)를 재구성한다.

2015년 2월 7일 토요일

[Eclipse] 이클립스 Papyrus(파피루스) UML 클래스 다이어그램을 자바(Java) & C++ 코드로 변환하기

papyrus 로고
papyrus 로고

지난번에 설명했던 Eclipse 개발팀에서 만든 모델링 툴인 Papyrus(파피루스), 파피루스는 추가 확장 소프트웨어로써 프로그램 모델링 툴을 지원한다. 보통 UML 다이어그램을 그릴 때 사용하며, UML 클래스다이어그램을 코드로 변환시키거나 코드를 UML 다이어그램으로 변환하는 기능도 제공한다. 언어는 현재 C++와 J링ava만을 지원한다.

Eclipse 파피루스 간단 사용법은 다른글을 참고하도록 하자, 이 글은 파피루스로 그린 클래스다이어그램을 코드로 변환시키는 기능에 대한 글이다.

우선 추가확장 프로그램을 설치하자. 새로운 소프트웨서 설치창에 Papyrus 업데이트 사이트를 등록해준다. 참고로 파피루스 버젼별 업데이트 사이트는 여기서 확인이 가능하다.

현재 최신 버젼 이클립스인 Luna 용은 주소가 요렇다.
http://download.eclipse.org/modeling/mdt/papyrus/updates/releases/luna
저 주소를 등록해주도록 하자.

파피루스 확장 repository 추가

등록을 끝마친 후 사이트를 골라 아래 체크박스 옵션에서 Group items by category 체크를 해제해주면 아래와 같은 추가 확장프로그램 리스트들을 보게 될것이다. 




자바(Java) 프로그래머들은 필요에 따라 아래 2개를 선택한 후 설치하고
  • Papyrus Java class Generator (Incubation)
    • 다이어그램 -> 자바코드로
  • Papyrus Java Reverse (Incubation)
    • 자바 코드 -> 다이어그램으로
C++ 프로그래머들은 
  •   Papyrus C++ profile, view and code generation (Incubation)
를 설치하도록 하자.




아직 설치가 끝난게 아니다. Papyrus Java classes Generator & Reverse 는 QVT Operational SDK 라는 추가 라이브러리를 요구한다. 만약 이걸 설치하지 않을시에는, 코드 변환을 하려고 버튼을 누른 순간 아래와 같은 에러 메시지를 보게될것이다.

No classes or packages produced from the transformation. Nothing is generated.
and exception "org.eclipse.papyrus.java.generator.metamodel.jdt.jdtmm.visitor.JDTVisitorException"

그렇니 다시 Install New Software 페이지에 들어가서, 이번에는 본인의 이클립스 업데이트 사이트를 선택한 후에 Modelling 카테고리 아래에서 QVT Operational SDK를 찾아 설치해주자자자




이 설치를 완료했다면, 이클립스 재시작후 UML 클래스 다이어그램 페이지로 가서




코드로 변환하기 원하는 클래스들을 선택한 후에, 우클릭 Java -> Generate Java Code를 선택하면 자동으로 자바클래스 파일들이 생성된다.

2015년 2월 6일 금요일

[Eclipse] 이클립스 Papyrus(파피루스)를 이용해서 UML 다이어그램 그리기

papyrus 로고

UML 다이어그램을 그리는 모델링 툴, Eclipse 확장 프로그램 Papyrus, Eclipse 개발팀에서 직접 개발했다. 이 툴을 이용해 클래스 다이어그램(Class Diagram), 엑티비티 다이어그램(Activity Diagram), 시퀀스 다이어그램(Sequence Diagram) 등 각종 UML 다이어그램을 그릴 수가 있다

우선 Eclipse 를 켜 본인 Eclipse 버젼에 알맞는 Papyrus 를 다운로드 하자.
Modelling 카테고리에 있다.

이클립스 파피루스 소프트웨어 설치 페이지
이클립스 소프트웨어 설치 페이지


Papyrus UML 소프트웨어를 골라 설치하면



새로 만들기 창


새로 만들기 창에 이런 문서들을 보게 될 것이다. 파피루스 모델을 생성하자


파피루스 모델 언어 설정 페이지



언어는 UML로 고르고 완료를 누르게 되면 아래와 같은 창을 보게될 것이다.


아직은 텅 빈 파피루스 모델

아직은 텅 비었다. 다이어그램을 생성해야지 그림을 그릴수가 있다

Perspective 왼쪽 아래 Model Explorer에 model 을 우클릭 하면


새 다이어그램 생성 메뉴


이런 메뉴를 보게되는데, 여기서 필요한 다이어그램을 클릭하면(나는 Class Diagram 을 클릭했다),
아래와 같은 팔레트가 오른쪽에 생성될 것이다, 거기서 필요한 다이어 그램을 끌어서 놓은 다음 속성을 수정하면 쉽게 UML 다이어그램을 그릴 수가 있다.



파피루스를 이용해 생성된 UML 클래스 다이어그램


혹시 저런 화면 구성이 보이지 않는다면
이클립스 Perspective를 Papyrus 용 Perspective로 바꿔주자

이클립스 Perspective 설정 페이지

2015년 1월 24일 토요일

[Eclipse] 이클립스에서 Node.js 개발 환경 세팅하기

Node.js 로고
Node.js 로고
자바스크립트(JavaScript) 개발을 하다 보면 제대로 된 디버거가 없어서 alert 나 console 을 사용해서 웹브라우져의 개발자 도구 콘솔에 프린트 하거나 팝업을 띄우기 마련인데, 이런 방식은 쉴틈없이 새로고침을 해줘야 해서 귀찮기 마련이다. 그러니 이클립스Node.js 를 이용해서 이클립스에 자바스크립트 콘솔을 세팅해보도록 하자.

우선 Eclipse 를 켜서 하고 메뉴에서 Help->Install New Software를 클릭하면 아래와 같은 창을 보게 될 것이다.

이클립스 부가 소프트웨어 설치 스크린
이클립스 부가 소프트웨어 설치 스크린

노란색으로 강조해 놓은 옵션 박스에서, 본인의 이클립스 버젼을 선택한 후에, 아래의 이클립스 확장들을 설치해 준다.
  • JavaScript Development Tools 
  • Eclipse Web Developer Tools 

그리고 이곳[http://nodejs.org/]에서 Node.js 인스톨러를 다운 받아 설치해준다.
설치 후에 시스템 속성에 들어가 환경변수 설정에서 시스템 변수를 등록 해주자.

Node.js 윈도우 환경 변수 등록

나 같은 경우는 위와 같이 등록해줬다. node.js 설치시 기본값으로 설치했다면 변수 값을 나와 같이 하면 된다. 그리고 본인의 변수 이름을 잘 기억하도록 하자.

그리고 다시 Eclipse 로 돌아가서 메뉴에서

Run -> External Tools -> External Tools Configuration
외부 도구 설정으로 들어가자


Eclipse 외부 도구 설정

위의 이미지에 1 Javascript라 적힌건 무시하자, 내가 이미 설정해 놓은게 있어서 저렇게 나오는거니까.

그리고나서 저걸 클릭하면 요런 창을 보게 되는데



노란색으로 칠해놓은 새로만들기 버튼을 누르면




이런 창을 보게 된다. 여기서 Location, Working Directory, Arguments를 저렇게 적어주자.

만약 환경변수 설정시에 변수 이름을 node 로 하지 않았다면 Arguments의

/c "node ${resource_loc}" /c "환경변수이름 ${resource_loc}"

이렇게 적어주면 된다.

그리고나서 자바스크립트 프로젝트를 생성하고  console.log 를 이용 스크립트 작성 후 아래와 같이 External Tool을 클릭해서 방금 우리가 만든 설정을 이용하면





이렇게 이클립스 콘솔에 프린트 된다.