Dynamic Web Project 생성하고, 

src/ 폴더 아래에는 java와 properties 파일을 

WebContent/ 폴더 아래에는 WEB-INF 폴더와 jsp, 이미지, CSS 등을 복사하시면 될 것입니다. 


Maven web프로젝트 생성시에는 

main/java/src/ 에 java 파일을 

main/java/resources/ 폴더에 properties 파일과 xml 파일을 

main/webapp/ 폴더 아래에는 WEB-INF 폴더와 jsp, 이미지, CSS 등을 복사하시면 될 것입니다. 


related:

http://www.okjsp.net/seq/244872

10/04일에 maven 3.0이 나왔습니다. http://maven.apache.org/
가볍게 2.8M의 파일을 받아서 압축을 풀었습니다. /home/kenu/java/apache-maven-3.0/

환경변수 $PATH에 maven실행파일 경로를 추가했습니다.
JAVA_HOME=/home/kenu/java/jdk1.6.0_18
PATH=$PATH:$JAVA_HOME/bin:/home/kenu/java/apache-maven-3.0/bin
export JAVA_HOME
export PATH

환경변수를 적용하고, mvn 버전을 확인합니다.
$. ~/.profile
$mvn -version
Apache Maven 3.0 (r1004208; 2010-10-04 20:50:56+0900)
Java version: 1.6.0_18
Java home: /home/kenu/java/jdk1.6.0_18/jre
Default locale: ko_KR, platform encoding: UTF-8
OS name: "linux" version: "2.6.32-25-generic" arch: "amd64" Family: "unix"

설치는 잘 되었습니다.
샘플 프로젝트를 만들어봅니다. phase는 generate , groupId는 com.mycompany.app, artifactId는 my-app 정도가 됩니다.
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

이렇게 만들어집니다.
kenu@kenu-ubuntu:~/maven$ cd my-app
kenu@kenu-ubuntu:~/maven/my-app$ tree
.
|-- pom.xml
`-- src
    |-- main
    |   `-- java
    |       `-- com
    |           `-- mycompany
    |               `-- app
    |                   `-- App.java
    `-- test
        `-- java
            `-- com
                `-- mycompany
                    `-- app
                        `-- AppTest.java


이제 컴파일하고 빌드를 해봅니다.
mvn package

경로를 바꾸고 실행은 다음과 같이 할 수 있습니다.
java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App
Hello World!

설치는 잘 되었습니다.
사용자 홈 디렉토리 아래 .m2 라는 폴더가 생겨서 여기에 다운로드되는 파일들이 많이 있습니다. 로컬 캐시역할을 하기 때문에 처음 실행시에는 시간이 많이 걸립니다.

Ant를 넘어서 maven으로 갈아탈 준비중입니다.

버전이 맞지 않으면 이클립스의 다이나믹 웹 프로젝트가 컴파일 되지 않는 현상이 있습니다. Problems탭을 보면 다음과 같은 메시지가 보입니다.
Project facet Java 5.0 is not supported by target runtime Apache Tomcat v5.0
Java5.0은 Apache Tomcat v5.5 이상과 맞기 때문입니다.

해당 라인을 선택하고 Quick Fix 메뉴를 선택합니다. (ctrl+1 또는 command+1)

Quick Fix 창이 나오기는 합니다만 막막합니다. 그냥 Create a new runtime environment 선택된 상태에서 Finish 버튼을 클릭합니다.

Runtime Environment 에 Apache Tomcat v6.0을 선택합니다.

프로젝트 Clean...을 선택해서 다시 빌드합니다.

그냥 전체 class 다 지우고 빌드를 몽창 다 해버렸습니다.

말끔하게 해소되지 않는군요.
Java project facet과 자바컴파일러가 맞지 않는다는군요.

Quick Fix를 클릭하니 옵션이 두 개가 나왔습니다. 그냥 6.0을 하니 Apache Tomcat v6.0과 Java6.0은 또 어울리지 않는다는군요. 쩝.

프로젝트 프로퍼티창을 열어봅니다.

facet으로 검색을 해 봤습니다. Project Facets라는 것이 나옵니다.

이 항목에서 5.0으로 맞춰주었습니다.

Targeted Runtimes는 Apache Tomcat v6.0이 선택되어 있습니다.

Project > Clean... 과정을 다시 해보면 Facet 오류가 사라졌을 것입니다.


앞서 오픈소스인 httpunit을 통해서 프로젝트 소스 구성을 살펴봤습니다. 빌드스크립트인 build.xml를 통해서 프로젝트 소스를 가공하는 방법을 알 수 있습니다. 프로젝트의 작업 지시서와 같은 역할을 하는 것이죠.

이클립스의 아웃라인뷰에 나오는 타겟 목록입니다.
소스를 보면 <project ... default="jar"> 내용을 확인 할 수 있습니다. 기본 프로젝트 타겟은 jar 입니다.

그 외에도 수많은 작업그룹이 보입니다. 각각의 내용을 확인해 봐야 정확한 작업 내용을 알 수 있겠지만 여기서는 jar 를 중심으로 살펴보겠습니다.

<!--  ===================================================================  -->
<!--  Creates the jar archive                                              -->
<!--  ===================================================================  -->
<target name="jar" depends="compile" description="create the jar file">
    <mkdir dir="${lib.dir}" />
    <echo file="${build.dir}/info.txt">Manifest-Version: 1.0
Sealed: false
HttpUnit-Version: ${version}
Build-Date: ${TODAY}
Build-Time: ${TSTAMP}
</echo>
    <jar jarfile="${lib.dir}/${name}.jar" manifest="${build.dir}/info.txt">
        <fileset dir="${build.classes}" includes="com/**"/>
        <fileset dir="META-INF" includes="*.dtd"/>
    </jar>
</target>

주석의 모양도 참고 대상입니다.  타겟의 depends속성을 보면 compile 타겟이 먼저 수행되는 것을 알 수 있습니다. <jar> 태스크를 보면 JAR 파일명이 지정되어 있습니다. 컴파일된 클래스 디렉토리를 기준으로 com 패키지 아래 있는 것이 포함되고, META-INF 디렉토리에 있는 *.dtd 파일들도 jar 파일에 들어갑니다.

compile 타겟을 확인하면 소스의 위치는 확실히 알 수 있겠죠.

<!--  ===================================================================  -->
<!--  Compiles the source code                                             -->
<!--  ===================================================================  -->
<target name="compile-for-java2" depends="prepare,check_for_optional_packages" if="dom3.absent">
    <mkdir dir="${build.classes}" />
    <javac srcdir="src-1.4" destdir="${build.classes}"/>
</target>
<target name="compile" depends="prepare,check_for_optional_packages,compile-for-java2">
    <mkdir dir="${build.classes}" />
    <javac srcdir="${src.dir}" destdir="${build.classes}"
           debug="${debug}" deprecation="${deprecation}" optimize="${optimize}">
        <classpath refid="base.classpath" />
        <exclude name="**/JTidyHTMLParser.java" unless="jtidy.present" />
        <exclude name="**/ScriptFilter.java" unless="nekoHTML.present" />
        <exclude name="**/NekoHTMLParser.java" unless="nekoHTML.present" />
        <exclude name="**/NekoDOMParser.java" unless="nekoHTML.present" />
        <exclude name="**/servletunit/*" unless="jsdk.present" />
        <exclude name="**/JUnitServlet.java" unless="junit.present" />
        <exclude name="**/javascript/*" unless="rhino.present" />
    </javac>
</target>
 
클래스의 빌드 디렉토리를 만든 후에 파일들을 컴파일 합니다. 컴파일 시 관련 jar의 유무에 따라 컴파일에서 제외시키기도 합니다. 여러가지 jar파일들을 사용하는 것을 알 수 있습니다. jtidy, nekoHTML, jsdk, junit, rhino. 대부분 자바스크립트 파서나 실행에 관련된 것들이죠.

httpunit 한 프로젝트에서도 건질 것들이 굉장히 많은 듯 합니다.


오픈소스의 좋은 점 중 하나는 제품 개발과정을 볼 수 있다는 것입니다. 소스 프로젝트의 구성을 볼 수 있고, ant나 maven 등의 빌드 구성과 TestCase를 어떻게 만들었는지 확인이 가능합니다.

httpunit이라는 소스포지의 오픈소스를 통해서 그 구성을 살펴보겠습니다.
http://httpunit.sourceforge.net 에 접속합니다.

왼쪽 메뉴 중 Download를 클릭해서 다운로드 받습니다.

파일을 이클립스에서 import 해보겠습니다. httpunit 이라는 이름으로 자바프로젝트를 하나 만듭니다.

프로젝트를 선택하고 컨텍스트 메뉴에서 Import... 를 선택합니다.

ar 이라고 필터란에 입력하면 Archive File 메뉴가 보입니다.

앞서 다운로드 받은 httpunit-1.7.zip 파일을 선택합니다.

폴더 통째로 import를 해왔습니다.

디렉토리의 구성을 잘 살펴볼 필요가 있습니다.
doc : 아마도 html 이나 프로젝트 관련 문서들 원본 등이 있을 것입니다.
examples : httpunit을 이용하는 예제들 디렉토리
jars : 프로젝트 관련 jar 파일 디렉토리
lib : httpunit.jar 산출물 생성 디렉토리
META-INF : jar 압축시 기본 생성 디렉토리
src : java 소스 디렉토리
test : 테스트케이스 디렉토리
build.xml : 프로젝트 빌드를 위한 ant 빌드 스크립트


이러한 구성을 참고로 자신이 진행하는 프로젝트의 소스 및 파일들을 관리하는 것도 좋을 것입니다.

working set 를 이용한 프로젝트 그루핑입니다.
패키지 익스플로러의 왼쪽 역삼각형을 클릭하면 Top Level Elements 라는 메뉴가 보입니다. Working Sets 을 클릭하면 재밌는 뷰를 볼 수 있습니다.
사용자 삽입 이미지


New 버튼을 클릭해서 세트를 만들어 프로젝트들을 그루핑할 수 있습니다.
사용자 삽입 이미지


완료가 된 다음의 모습입니다. 관련된 프로젝트들이 세트별로 묶여서 한층 보기가 좋습니다.
사용자 삽입 이미지


좋은 주말 되세요.
java 프로젝트 생성시 jdk의 버전을 달리 할 수 있습니다.
시스템 환경변수 JAVA_HOME 을 jdk1.6으로 잡아 놓았습니다. 이 때 이클립스는 보통 1.6 기반으로 시작이 됩니다.
사용자 삽입 이미지

jdk1.4로 프로젝트 만들기


하단의 메시지는 명확하게 얘기해 줍니다. 기본 컴파일러는 1.5인데, 새로운 프로젝트는 1.4 버전의 컴파일러가 사용된다고 말이죠.

이클립스 프로젝트를 통째로 압축하면 그것을 바로 가져올(import) 수 있습니다.
http://code.google.com/p/daysago/ 에 올려 놓은 파일은 이클립스 프로젝트를 압축해 놓은 것입니다.

zipped project

zipped project

daysago-0.22.zip 파일을 다운로드 받습니다.

project import

project import

이클립스의 패키지 익스플로러에서 import를 선택합니다.
filter text에 "ex"를 입력하면 Existing Projects into Workspace 라는 항목이 보입니다.
Select archive file

Select archive file

두 번째 옵션인 Select archive file 를 선택하고 Browse... 버튼을 클릭해서 다운로드 받은 daysago-0_22.zip 파일을 선택합니다. daysago라는 프로젝트가 보입니다.

imported project

imported project


가져오기 작업 끝이죠. ^^


두 개의 프로젝트의 차이점은 일반 자바 애플리케이션이냐 웹 애플리케이션이냐 입니다. 그에 따라서 개발하는 소스의 디렉토리 구조가 달라집니다. 이클립스에서 프로젝트 아이콘의 모양도 차이가 있습니다. J 글자는 Java라는 의미이고, 웹프로젝트는 동그란 지구 이미지가 하나 더 붙어있습니다.
Java Project and Dynamic Web Project

Java Project and Dynamic Web Project


일단 eclipse 3.3 wtp에서 옵션 조정없이 Java 프로젝트와 Dynamic Web Project를 만들어서 설정파일을 비교해 보았습니다. 퍼스펙티브는 모든 파일이 다 보이는 Resource Perspective로 정했습니다.
compare with each other

compare with each other


만들어진 두 개의 프로젝트를 선택하고 Compare With > each other를 선택합니다. 두 프로젝트의 디렉토리, 파일이 비교됩니다.

directory, file diff

directory, file diff

.classpath 파일은 프로젝트의 클래스패스가 지정되는 파일입니다. 이 파일 덕분에 환경변수에 클래스패스를 지정하는 고전적인 자바 개발법에서 벗어날 수 있죠. 하단의 파일 비교를 보면 웹 프로젝트 쪽에 2줄이 더 추가된 것을 알 수 있습니다.
일반 자바 프로젝트에서 자바 웹 프로젝트로 변하면서 추가된 디렉토리는 .settings , build, WebContent 디렉토리 셋입니다. build/classes 디렉토리는 bin 디렉토리의 대체입니다.
.project를 더블클릭해서 비교해 보시면 프로젝트 속성이 어떻게 변경이 되었는지 확인할 수 있습니다.
javablogs 메일링을 보다가 한 블로그에서 재미있는 협업용 플러그인을 보았다.
eclipse 서브프로젝트인 것 같은데 몇 일 전에 1.0 릴리스가 있었네.

Mylar is a task-focused UI for Eclipse that reduces information overload and makes multi-tasking easy. It does this by making tasks a first class part of Eclipse, and integrating rich and offline editing for repositories such as Bugzilla, Trac, and JIRA. Once your tasks are integrated, Mylar monitors your work activity to identify information relevant to the task-at-hand, and uses this task context to focus the Eclipse UI on the interesting information, hide the uninteresting, and automatically find what's related. This puts the information you need to get work done at your fingertips and improves productivity by reducing searching, scrolling, and navigation. By making task context explicit Mylar also facilitates multitasking, planning, reusing past efforts, and sharing expertise.

설명을 보면 버그질라나 JIRA와 같은 버그,이슈 트랙커들과 연결이 되어서 프로젝트를 통합적으로 개발하는데 들이는 시간을 줄여줄 것 같다.

스크린샷을 보니 감이 온다.

+ Recent posts