'Ant'에 해당되는 글 5건

  1. 2012.12.27 ant depend task
  2. 2012.07.29 [ANT-GIT] ant taks git 설정
  3. 2008.05.26 [ANT] build.xml 간단 예제
  4. 2008.05.26 [ANT] task 간단 정리
  5. 2008.05.26 [ANT] 타입과 프로퍼티

ant depend task

ANT/Ivy 2012.12.27 15:16

그룹장님께서 찾아주신것


http://www.buildmeister.com/articles/introduction_to_ant_dependency_checking




참고

http://stackoverflow.com/questions/627868/do-you-use-ants-depend-task

Posted by 용식
TAG Ant, depend

3년전에 만들어진 macrodef들이 있었음..

https://github.com/newtriks/Ant-Funk/tree/master/tests


소스 관리를 git으로 하다보니

CI까지는 아니더라도 그냥 주기적으로 소스 내려받고

deploy해주는 shell이 하나 필요했는데.. build-deploy이야 ant의 주무기라쳐도

git하고 연결을 어케해야 하나 싶었는데..

위 예제에 거의 다 되어있어서.. 쉽게(는 아니고.. 좀 헤매다가..) 설정함..


일단 당장 필요한 것은 git pull이라서

아래와 같이 설정.. path는 빠져야 되네..



<macrodef name="git">

                <attribute name = "command" />

                <attribute name = "dir" default = "" />

                <element name = "args" optional = "true" />

                <sequential>

                        <echo file="GIT_COMMAND_LOG" message="git @{command} &#xa;"

                                append="yes" />

                        <exec executable = "git" dir = "@{dir}">

                                <arg value = "@{command}" />

                                <args/>

                        </exec>

                </sequential>

        </macrodef>


        <macrodef name = "git-pull">

                <attribute name = "path" />

                <attribute name = "branch" />

                <attribute name = "head" />

                <sequential>

                        <git command = "pull" >

                                <args>

                                        <arg value = "@{branch}" />

                                        <arg value = "@{head}" />

                                </args>

                        </git>

                </sequential>

        </macrodef>


 <target name="gitpull">

                <git-pull branch="origin" head="+master" />

  </target>


git으로 매크로 설정하고.. 매개변수를 받을 수 있도록 한 후 이걸 이용해서 task까지 만들어내는 예제..

ant gitpull 로 실행해보니 잘 내려받는다.


Posted by 용식
TAG Ant, git

간단한 예제


<?xml version="1.0" encoding="euc-kr"?>
<project default="main" basedir=".">


<!--property setting-->
<property name="name" value="ex"/>
<property name="version" value="1.0"/>
<property name="src.dir" value="src"/>
<property name="build.dir" value="build"/>
<property name="classes.dir" value="${build.dir}/classes"/>
<property name="jar.file" value="${build.dir}/${name}.jar"/>
<property name="dist.dir" value="dist"/>
<property name="dist.file" value="${dist.dir}/${name}-${version}"/>


--> 사용할 값들을 프로퍼티로 지정하여 사용하고 있다.


<!--compile target-->
<target name="compile">
 <mkdir dir="${build.dir}"/>
 <mkdir dir="${classes.dir}"/>
 <javac
  srcdir="${src.dir}"
  destdir="${classes.dir}">
 </javac>
</target>


--> 컴파일 타켓으로 build.dir과 classes.dir 디렉토리를 생성하고 scr.dir에 있는 java파일을 컴파일하여 classes.dir 에 생성한다


<!--jars target-->
<target name="jars" depends="compile">
 <jar
  jarfile="${jar.file}"
  basedir="${classes.dir}">
 </jar>
</target>

--jar타겟으로 jarfile명과 경로은는 프로퍼티에서 지정한 jar.file의 value값으로 하고

jar로 묶일 대상 클래스파일들은 classes.dir에 있는 클래스 파일들로 지정한다.


<!--distrobution target-->
<target name="dist" depends="jars">
 <mkdir dir="${dist.dir}"/>
 <zip
  destfile="${dist.file}.zip"
  basedir="${build.dir}"
  includes="*.jar"
 />
</target>

--> dist 타겟. 배포버젼 만들기로서 dist.dir 디렉토리를 생성 후 파일 이름은 dist.file 프로퍼티의 벨류값을 참조한다. build.dir디렉토리 아래 있는 모든 jar파일을 포함한다.


<!--main target-->
<target name="main" depends="jars"/>


--> 사용자가 타케을 지정하지 않은경우 (ant 실행시) 기본값으로 지정되는 타켓이다.


<!--clean target-->
<target name="clean">
 <delete dir="${build.dir}"/>
 <delete dir="${dist.dir}"/>
</target>

--> 이전의 컴파일한 클래스 파일과 배포본을 삭제하기 위한 타겟


<!--all target-->
<target name="all" depends="clean, dist"/>

--> ant all이라고 실행을 하게 되면 이 타겟은 clean과 dist에 의존하고 있으므로 최초 clean타겟이 실행되며, 그 후 dist 타겟이 실행되는데 dist는 jars에 의존되어있고 jars는 컴파일에 의존되어 있으므로 그것들이 다 실행 후에 dist 타겟이 완료되게 된다.


</project>

Posted by 용식
TAG Ant, build.xml
 

1.<Java> 태스크

자바 애플리케이션 클래스를 실행시키는 태스크임.


<java classname="test.Main">

 <arg value="-h"/>

 <classpath>

   <pathelement location="dist/helloproject.jar"/>

   <pathelement path="${java.class.path}"/>

 </classpath>

</java>


-> test 패키지의 Main 클래스를 실행한다. 클래스패스로는 ${java.class.path} 프로퍼티로

지정되어있는 디렉토리와 dist/helloproject.jar를 포함한다.


2.<javac> 태스크

<javac>는 java소스를 컴파일하는 태스크로, 아직 컴파일되지 않은 java파일이 존재하거나 혹은 .class파일이 java파일보다 이전에 컴파일된 클래스일때 컴파일한다.


<javac srcdir="${src}"

 destdir="${build}"

 includes="helloproject/p1/**, helloproject/p2/**"

 excludes="helloproject/p1/expackage/**"

 classpath="helloproject.jar"

 debug="on"

/>


-> ${src}디렉토리를 컴파일하여 ${build}디렉토리에 클래스를 생성한다. helloproject/p1 이하의 모든 파일과, helloproject/p2이하의 모든 파일이 컴파일되고, helloproject/p1/expackage이하의 모든 파일은 제외되며, helloproject.jar가 클래스 패스에 추가된다.


아래와 같이 쓸 수도 있다.

<javac destdir="${build}"

 classpath="helloproject.jar"

 debug="on">

 <src path="${src}"/>

 <include name="helloproject/p1/**"/>

 <include name="helloproject/p2/**"/>

 <exclude name="helloproject/p1/expackage/**"/>

</javac>


<src>로 srcdir속성을 <include>와 <exclude>로 includes,excludes 속성을 대체하였다.


3.<jar> 태스크

- 클래스와 자원을 묶어 jar파일로 생성하는 태스크이다.


<jar destfile="${dist}/lib/helloproject.jar"

 basedir="${build}/classes"

 includes="helloproject/test/**"

 excludes="**/Test.class"

/>

-> helloproject.jar 파일로 ${build}/classes밑에 있는 파일들을 묶는 예제이다. Test.class란 이름의 클래스는 제외한다.


<jar destfile="${dist}/lib/helloproject.jar">

 <fileset dir="${build}/classes"

  excludes="**/Test.class"

/>

<fileset dir="${src}/resources"/>

</jar>

-> fileset을 이용하여 Test.class를 제외한 모든 파일을 jar파일로 묶을때 리소스를 포함하는 예제임. resources 디렉토리에 밑에 이미지등의 파일이 존재하면 jar파일에 포함이 된다.



4.<mkdir> 태스크

<mkdir dir="${dist}/lib"/>


5.<copy> 태스크

<copy file="myfile.txt" tofile="mycopy.txt"/>


파일을 디렉토리로 복사는

<copy file="myfile.txt" todir="../some/other/dir"/>


디렉토리를 다른 디렉토리로 복사

<copy todir="../new/dir">

<fileset dir="src_dir"/>

</copy>


mapper엘리먼트를 사용해서 src_dir 디렉토리의 모든 파일 명에 .bak를 붙여서 복사

<copy todir="../backup/dir">

<fileset dir="src_dir">

<mapper type="glob" from="*" to="*.bak"/>

</copy>


6.<delete> 태스크

파일이나 파일을 포함한 디렉토리 혹은 fileset으로 추가된 파일이나 디렉토리를 삭제하는 태스크다.


<delete file="/lib/ant.jar"/>


디레토리 삭제

<delete dir="lib"/>


fileset을 사용하여 확장자가 bak인 파일을 삭제

<delete>

<fileset dir="." includes="**/*.bak"/>

</delete>


빈디렉토리도 함께 삭제

<delete includeEmptyDirs="true">

<fileset dir="build"/>

</delete>


7.<getkey> 태스크

<genkey>는 key 저장소에 key를 생성하는 태스크로 자바 1.2이상에서 지원한다.


<genkey

alias="apache-group" storepass="secret"

dname="CN=Ant Group, OU=Jakarta Division, O=Apache.org , C=US"/>


-> 아파치 그룹이란 별칭을 주고 패스워드로는 secret을 준다. dname속성을 입력한다.


dname은

<dname>

<param name="CN" value="Ant Group"/>

<param name="OU" value=Jakarta Division"/>

....


이런식으로 바꿔 쓸 수 있다.



8.<signjar>태스크

javasign명령어를 사용하여 jar파일이나 zip파일을 서명하는 태스크다.


<signjar

jar="${dist}/lib/ant.jar" alias="apache-group" storepass="secret"/>

Posted by 용식
TAG Ant, ant task
 

1.경로형 구조 타입

- 클래스패스나 패스처럼 ant에서 경로를 나타내고자 할 때 사용하는 타입이다. 이 타입의 하위 엘리먼트인 pathelement는 파일이나 디렉토리 값을 지정한다.


<classpath path="${classpath}"/>를


<classpath>

 <pathelement path="${classpath}"/>

</classpath>

로 사용 할 수 있다.


pathelement를 사용한 경우 먼저 선언한 패스부터 클래스패스를 잡을 수 있다.예로 같은 클래스가 a.jar파일과 b.jar파일에 존재하고, a.jar가 먼저 선언되어있다면 a.jar의 클래스를 사용한다.


fileset타입으로 경로를 설정하기도 하는데 이때 클래스패스의 순서는 보장하지 못 한다.


<classpath를 나타내는 여러가지 ㅇㅖ>

<classpath>

<pathelement path="${classpath}"/>

<fileset dir="lib">

<include name="**/*.jar"/>

</fileset>

<pathelement location="classes"/>

<dirset dir="${build.dir}">

<include name="apps/**/classes"/>

<exclude name="apps/**/*Test*"/>

</dirset>

<filelist refid="third-party_jars"/>

</classpath>


${classpath} 디렉토리

lib디렉토리 이하의 모든 jar파일

classes디렉토리

${build.dir}디렉토리내에 apps/**/classes패키지를 포함하고 패키지명에 Test문자를 포함하는 패키지는 제외한다.

id가 third-party_jars인 파일 리스트를 참고한다.


<path id="project.class.path">

<pathelement location="lib/"/>등으로 해놓고


<classpath refid="project.class.path>등으로 사용한다.



FILE SET

파일과 디렉토리의 집합을 나타내는 타입이다.

Example

<fileset dir="${server.src}">

<include name="**/*.java"/>

<exclude name="**/*Test*"/>

</fileset>


참고

<classpath>
      <pathelement path="${classpath}"/>
      <pathelement location="lib/helper.jar"/>
    </classpath>

location 속성은, 프로젝트의 기본 디렉토리(또는 절대 파일명의)에 대해서 단일의 파일 또는 디렉토리를 지정합니다,


한편 path 속성은 콜론- 이나 세미콜론- 으로 단락지어진 위치의 리스트를 받아들입니다.


pathlocation 속성을 지원한 <classpath> 태그를 기술하는 지름길로서:

    <classpath>
      <pathelement path="${classpath}"/>
    </classpath>

는 다음과 같이 단축할 수가 있습니다.

    <classpath path="${classpath}"/>

게다가, DirSets, FileSets, 와 FileLists 는, 내부에 <dirset>, <fileset>, 과 <filelist> 요소로 지정할 수가 있습니다. 주의:경로같은 것들의 구조에 FileSet를 빌드하는 파일이 추가되는 순서는 정의되지 않고 있습니다.

    <classpath>
      <pathelement path="${classpath}"/>
      <fileset dir="lib">
        <include name="**/*.jar"/>
      </fileset>
      <pathelement location="classes"/>
      <dirset dir="${build.dir}">
        <include name="apps/**/classes"/>
        <exclude name="apps/**/*Test*"/>
      </dirset>
      <filelist refid="third-party_jars">
    </classpath>

이것은, ${classpath}의 값에, lib디렉토리 안의 모든 jar 파일, classes디렉토리, ${build.dir}apps 서브 디렉토리 아래의 모든 classes 라고 명명된 디렉토리를 추가한 path를 구축합니다. 단, 이름에 Test를 포함한 경우와 FileList로 지정된 파일은 제외됩니다.


Posted by 용식
TAG Ant