태그 보관물: Eclipse

eclipse에서 apache ivy로 binary 의존성 확인

Apache Ant 프로젝트의 서브 프로젝트로 Ivy 프로젝트(http://ant.apache.org/ivy/)가 있습니다.

 Ivy is a tool for managing (recording, tracking, resolving and
reporting) project dependencies.

아래의 IvyTest 클래스, ivy.xml을 만들고 build.xml파일에서 resolve target을 실행하게 아래와 같은 결과를 얻을 수 있습니다.

IvyTest.java

package dev;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.GnuParser;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.commons.lang.WordUtils;

import static java.lang.System.out;

public class IvyTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        try {
            Option msg = OptionBuilder.withArgName(“msg”).hasArg().withDescription(“the message to capitalize”).create(“message”);
           
            Options options = new Options();
            options.addOption(msg);
   
            CommandLineParser parser = new GnuParser();
            CommandLine line = parser.parse(options, args);
   
            String  message = line.getOptionValue(“message”, “default message”);
            out.println(“standard message : ” + message);
            out.println(“capitalized by ” + WordUtils.class.getName() + ” : ” + WordUtils.capitalizeFully(message));
           
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}

build.xml

<?xml version=”1.0″?>
<project name=”ivy-test” default=”resolve” basedir=”.” xmlns:ivy=”antlib:org.apache.ivy.ant”>
    <property name=”project.name” value=”ivy-test” />
     <property name=”project.version” value=”1.0.0″ />
     <property name=”project.owner” value=”mcsong@gmail.com” />
   
    <!– src –>
    <property name=”src.dir” value=”src” />
    <property name=”src.main.dir” value=”src/main” />
    <property name=”src.test.dir” value=”src/test” />
   
    <!– build –>
    <property name=”build.dir” value=”build” />
    <property name=”build.main.classes” value=”${build.dir}/classes/main” />
    <property name=”build.test.classes” value=”${build.dir}/classes/test” />
   
    <!– lib –>
    <property name=”lib.dir” value=”lib” />
    <property name=”lib.ext.dir” value=”lib-ext” />
   
    <!– dist –>
    <property name=”dist.dir” value=”dist” />
   
    <!– doc –>
    <property name=”doc.dir” value=”doc” />
   
    <!– ivy –>
    <property name=”ivy.install.version” value=”2.1.0″ />
    <property name=”ivy.dir” value=”ivy” />
    <property name=”ivy.jar.file” value=”${lib.dir}/ivy-2.1.0.jar” />
   
    <!– test –>
    <property name=”test.dir” value=”test” />
   
    <tstamp>
        <format property=”time” pattern=”yyyyMMdd” />
    </tstamp>
   
    <!– setting class path –>
    <path id=”class.path”>
        <pathelement location=”${build.main.classes}”/>
        <pathelement location=”${build.test.classes}”/>
        <pathelement location=”${dist.dir}”/>
        <pathelement location=”${lib.dir}”/>
 
        <pathelement location=”${lib.dir}/junit.jar”/>
        <pathelement location=”${lib.dir}/commons-cli-1.2.jar”/>
        <pathelement location=”${lib.dir}/commons-lang-2.5.jar”/>
        <pathelement location=”${lib.dir}/ivy-2.1.0.jar”/>
        <pathelement location=”${ant.home}/lib”/>
    </path>   
   
    <!– initialize –>
    <target name=”init” description=”–> create directories”>
        <echo>init target started</echo>
        <mkdir dir=”${doc.dir}”/>
        <mkdir dir=”${build.dir}”/>
        <mkdir dir=”${build.main.classes}”/>
        <mkdir dir=”${build.test.classes}”/>
        <mkdir dir=”${test.dir}”/>
        <!–mkdir dir=”${test.result.dir}”/>
        <mkdir dir=”${test.report.dir}”/–>
        <mkdir dir=”${dist.dir}”/>
        <echo>init target completed</echo>
    </target>       
   
    <!– clean –>
    <target name=”clean” description=”–> clean created directories”>
        <echo>clean target started</echo>       
        <delete dir=”${doc.dir}” />
        <delete dir=”${build.dir}”/>
        <delete dir=”${build.main.classes}”/>
        <delete dir=”${build.test.classes}”/>
        <delete dir=”${test.dir}”/>
        <!–delete dir=”${test.result.dir}”/>
        <delete dir=”${test.report.dir}”/–>
        <delete dir=”${dist.dir}”/>
        <echo>clean target completed</echo>
    </target>       
   
    <macrodef name=”compile_”>
        <attribute name=”srcdir” />
        <attribute name=”destdir” />
        <sequential>
            <javac srcdir=”@{srcdir}” destdir=”@{destdir}”>
                <classpath refid=”class.path” />
            </javac>
        </sequential>
    </macrodef>   

       <!– compile source –>
    <target name=”compile” depends=”clean, init” description=”compile this project”>
        <echo>compile target started</echo>
        <compile_ srcdir=”${src.main.dir}” destdir=”${build.main.classes}” />
        <compile_ srcdir=”${src.test.dir}” destdir=”${build.test.classes}” />
        <echo>compile target completed</echo>
    </target>   

    <!– run –>
    <target name=”run” depends=”compile” description=”run the project”>
        <echo>run target started</echo>
        <property name=”arg.01″ value=”ivy testing !”/>
        <java classpathref=”class.path” classname=”dev.IvyTest”>
            <arg value=”-message”/>
            <arg value=”${arg.01}”/>
        </java>
        <echo>run target completed</echo>
    </target>
   
   
    <target name=”resolve” depends=”init” description=”retreive dependencies with ivy”>
        <ivy:retrieve />
    </target>       
   
    <target name=”report” depends=”resolve” description=”generates a report of dependencies”>
        <ivy:report todir=”${build.dir}”/>
    </target>
  
    <target name=”clean-cache” description=”clean the ivy cache”>
        <ivy:cleancache />
    </target>
       
</project>

ivy.xml

<ivy-module version=”2.0″>
    <info organisation=”org.apache” module=”hello-ivy”/>
    <dependencies>
        <dependency org=”commons-lang” name=”commons-lang” rev=”2.5″/>
        <dependency org=”commons-cli” name=”commons-cli” rev=”1.2″/>
    </dependencies>
</ivy-module>

결과

Buildfile: C:\dev\works\ivy_test\build.xml
init:
     [echo] init target started
     [echo] init target completed
resolve:
[ivy:retrieve] :: Ivy 2.1.0 – 20090925235825 :: http://ant.apache.org/ivy/ ::
[ivy:retrieve] :: loading settings :: url = jar:file:/C:/Program%20Files/eclipse/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ivy-2.1.0.jar!/org/apache/ivy/core/settings/ivysettings.xml
[ivy:retrieve] :: resolving dependencies :: org.apache#hello-ivy;working@LENOVO-FAD74E43
[ivy:retrieve]     confs: [default]
[ivy:retrieve]     found commons-lang#commons-lang;2.5 in public
[ivy:retrieve]     found commons-cli#commons-cli;1.2 in public
[ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-lang/commons-lang/2.5/commons-lang-2.5-javadoc.jar …
[ivy:retrieve] ……
[ivy:retrieve] …….
[ivy:retrieve] …..
[ivy:retrieve] ……..
[ivy:retrieve] ……..
[ivy:retrieve] ……….
[ivy:retrieve] ………
[ivy:retrieve] ….
[ivy:retrieve] …
[ivy:retrieve] ….
[ivy:retrieve] ……
[ivy:retrieve] …. (1557kB)
[ivy:retrieve] .. (0kB)
[ivy:retrieve]     [SUCCESSFUL ] commons-lang#commons-lang;2.5!commons-lang.jar(javadoc) (24578ms)
[ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-lang/commons-lang/2.5/commons-lang-2.5-sources.jar …
[ivy:retrieve] ……
[ivy:retrieve] …… (357kB)
[ivy:retrieve] .. (0kB)
[ivy:retrieve]     [SUCCESSFUL ] commons-lang#commons-lang;2.5!commons-lang.jar(source) (4109ms)
[ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-lang/commons-lang/2.5/commons-lang-2.5.jar …
[ivy:retrieve] ……..
[ivy:retrieve] ….. (272kB)
[ivy:retrieve] .. (0kB)
[ivy:retrieve]     [SUCCESSFUL ] commons-lang#commons-lang;2.5!commons-lang.jar (5313ms)
[ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-cli/commons-cli/1.2/commons-cli-1.2-sources.jar …
[ivy:retrieve] … (47kB)
[ivy:retrieve] .. (0kB)
[ivy:retrieve]     [SUCCESSFUL ] commons-cli#commons-cli;1.2!commons-cli.jar(source) (2203ms)
[ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-cli/commons-cli/1.2/commons-cli-1.2.jar …
[ivy:retrieve] … (40kB)
[ivy:retrieve] .. (0kB)
[ivy:retrieve]     [SUCCESSFUL ] commons-cli#commons-cli;1.2!commons-cli.jar (1610ms)
[ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-cli/commons-cli/1.2/commons-cli-1.2-javadoc.jar …
[ivy:retrieve] …..
[ivy:retrieve] .. (209kB)
[ivy:retrieve] .. (0kB)
[ivy:retrieve]     [SUCCESSFUL ] commons-cli#commons-cli;1.2!commons-cli.jar(javadoc) (3734ms)
[ivy:retrieve] :: resolution report :: resolve 12688ms :: artifacts dl 41562ms
    ———————————————————————
    |                  |            modules            ||   artifacts   |
    |       conf       | number| search|dwnlded|evicted|| number|dwnlded|
    ———————————————————————
    |      default     |   2   |   2   |   2   |   0   ||   6   |   6   |
    ———————————————————————
[ivy:retrieve] :: retrieving :: org.apache#hello-ivy
[ivy:retrieve]     confs: [default]
[ivy:retrieve]     4 artifacts copied, 2 already retrieved (2171kB/47ms)
BUILD SUCCESSFUL

위의 내용을 통해서, 프로젝트의 의존성 있는 바이너리들을 쉽게 관리(?) 할 수 있을듯 합니다.
개발팀에서 적용하기에는 좀 귀찮은 작업일듯 하나, 개발팀의 모임인 개발실 급의 규모에서는 적용할 만한 기술인거 같네요..

참고로, Ivy 프로젝트의 설치는 아래와 같습니다.
1. 다운로드
2. ivy-2.1.0.jar를 ${ant.home}/lib에 카피를 합니다.
3. eclipse에서 window –> preference –> ant –> runtime –> classpath의 ant home entries에서 add external jars 버튼을 통해서 ivy-2.1.0.jar를 잡아주면 됩니다. 

위 데이타에 대한 리포팅 결과는 아래의 첨부파일을 참고하세요..
cfile7.uf.156C4F1C4C207A16183D8B.mht
* 참고자료
 – 사람을 위한 자동화: Ivy로 의존성 관리하기

이클립스에서 자바 소스 보기

이클립스에서 자바로 개발을 하다보면, 라이브러리나 API대상의 코드를 확인하기 위해서 F3 키를 눌려서 확인한다. 특히 자바 API 소스를 보기 위해서는 자바 소스를 간단하게 링크만 하면 된다. 아래의 이미지처럼, JRE System Library에서 rt.jar의 속성창에서 Java Source Attachment의 Location path에 src의 위치를 확인시켜 주면 소스가 잘 나온다.

이클립스에서 CVS 연결끊기

Disconnecting a project from CVS

Disconnect a project from CVS to disable the CVS operations that can be performed on the project and it resources and optionally to remove the CVS information (stored in the CVS folders) associated with the project.

To disconnect a project from CVS:

1. In one of the navigation views, select the project to be disconnected.
2. Select Team > Disconnect from the project’s pop-up menu. The Confirm Disconnect from CVS dialog opens.
3. In the dialog, choose one of:
1. Delete the CVS meta information – disables the CVS team menu operations and removes the CVS folders and their contents from the file system.
2. Do not delete the CVS meta information – disables the CVS team menu operations but leaves the CVS meta information.
4. Click Yes to disconnect the project.

이클립스에서 앤트 FTP Task 사용하기

앤트(ANT)로 빌드파일(build.xml)을 만들고, 빌드 스크립트를 사용해서 컴파일된 바이너리를 FTP로 리모트에 전송할 수 있다. 이 기능을 사용하는 방법은 아래와 같다.

1. FTP 라이브러리 설치
http://commons.apache.org/net/의 최신버전을 다운로드 받습니다.
다운로드 받은 라이브러리인 commons-net-1.x.x.jar 파일을 이클립스가 설치된 폴더/plugins/ant설치버전/lib 폴더에 카피를 합니다. 참고로, 현재 최신버전은 commons-net-1.4.1 이네요.. ^^

2. 이클립스 앤드 Classpath 세팅
Eclipse->Window->Preferences->Ant->Runtime->Classpath->Add External JARS를 통해서 commons-net-1.x.x.jar를 Classpath에 등록한다

3. 실행

  <ftp server=”ftp.yourserver.com” userid=”anonymous” password=”me@yourserver.com”>
<fileset dir=”yourdir/youdocs” />
</ftp>

앤트의 FTP Task에 대한 자세한 내용은 https://ant.apache.org/manual/Tasks/ftp.html 에서 참고를 하시면 됩니다. ^^

이클립스(Eclipse)에서 ArgoUML 사용하기

ArgoUML을 이클립스(Eclipse)에 설치해서 UML을 사용하는 방법을 살펴보자.

1. 설치

1.1 이클립스 설치

이클립스는 http://download.eclipse.org/eclipse/downloads/에서 다운로드해서 설치한다.

1.2 ArgoEclipse 플러그인 설치

이 플러그인은 이클립스 3.5 이상의 버전에서 동작한다. 설치를 위한 세부 과정은 다음과 같다.
1.2.1 이클립스 Help -> Install New Software 화면에서 New 버튼을 클릭한다.
1.2.2 아래의 정보를 입력해서 설치한다.
– Name: ArgoEclipse
– URL: http://argoeclipse.tigris.org/update_site
eclipse_argouml_installeclipse_argouml_install_2이제 설치를 완료했다.

2. 사용하기

이 플러그인의 사용 방법은 manual에서 확인할 수 있다.  이제 개발 중인 프로젝트에서 New -> Other -> ArgoUML 을 선택해서 프로젝트에 UML 파일을 만들어서 각종 UML 다이어그램을 그리고 저장할 수 있다.
사용자 삽입 이미지