Cloudify源码分析——ant build解读

0.打包成可部署的zip:Cloudify ant cloudify.zip

<target name="cloudify.zip" depends="prepare.env, cloudify.install, prepare.cloudify.package.without.unzip" />

1.准备环境

Target:prepare.env——主要完成Xap的准备

完成工作:1)删除./tmp里的所有文件

2)创建新的“./tmp目录

3)查看Xap${xap.files.tmp.dir}/ ${xap.installation.dir}-b${gs.build.number}.zip是否存在,将结果存放到appropriate.xap.zip.present中。

其中${tmp.dir}=./temp

${xap.files.tmp.dir}=./xap.files.tmp.dir

${xap.installation.dir}=gigaspaces-xap-premium-${gs.version}-${gs.milestone}

${gs.version}=9.6.0

${gs.milestone}=m1

${gs.build.number}=9480-641

检查的文件是:.\xap.files.tmp.dir\gigaspaces-xap-premium-9.6.0-m1-b9480-641.zip

4)调用下载,会根据刚才的3)的结果来判断是否下载(1.1.

5)将Xap解压到${tmp.dir}目录下。

其中:${tmp.dir}=./tmp

6)移动${tmp.dir}/${xap.installation.dir}${tmp.dir}/${cloudify.installation.dir}

其中:即将文件夹gigaspaces-xap-premium-9.6.0-m1重名命为gigaspaces-cloudify-${cloudify.version}-${cloudify.milestone}

cloudify.version=2.6.0

cloudify.build.number=4980-309

cloudify.milestone=m1

7)将${tmp.dir}/${cloudify.installation.dir}目录下的脚本("**/*.sh, **/*groovy*")权限修改为775

<target name="prepare.env">

<loadproperties srcfile="${build.properties.file}"/>

<delete dir="${tmp.dir}"/>

<mkdir dir="${tmp.dir}"/>

<available file="${xap.files.tmp.dir}/${xap.zip.name}" property="appropriate.xap.zip.present"/>

<ant target="download.zip" />

<unzip src="${xap.files.tmp.dir}/${xap.zip.name}" dest="${tmp.dir}" />

<move file="${tmp.dir}/${xap.installation.dir}" tofile="${tmp.dir}/${cloudify.installation.dir}" />

<chmod dir="${tmp.dir}/${cloudify.installation.dir}" includes="**/*.sh, **/*groovy*" perm="775" />

</target>

1.1.下载:download.zip

完成工作:下载Xap,放在${xap.files.tmp.dir}目录下

<target name="download.zip" unless="appropriate.xap.zip.present">

<loadproperties srcfile="${build.properties.file}"/>

<mkdir dir="${xap.files.tmp.dir}" />

<echo message="Please wait. Downloading ${cloudify.cdn.publish.url}/com/gigaspaces/${s3.gs.publish.folder}/gigaspaces-xap-premium-${gs.version}-ga-b${gs.build.number}.zip." />

<get verbose="true" src="${cloudify.cdn.publish.url}/com/gigaspaces/xap-core/${s3.gs.publish.folder}/${xap.zip.name}" dest="${xap.files.tmp.dir}"/>

</target>

2.Cloudify安装:cloudify.install

完成工作:将完成CLIescesc-commandsUSMrestfuldslrest-clientmanagement-space这些模块的编译

1)在本地Respository中安装jar。在工作目录./下执行mavenmaven.batmaven),参数 clean install -Dmaven.test.skip=true

2)生成javadoc。在工作目录./下执行maven(maven.batmaven),参数 javadoc:javadoc -Dmaven.test.skip=true

3)生成restfulApi。在${basedir}/../restful目录下,执行 maven javadoc:javadoc -Dmaven.test.skip=true

<target name="cloudify.install">

<exec dir="${basedir}" executable="${mvn.executable}" failοnerrοr="true">

<arg line="clean install -Dmaven.test.skip=true"/>

</exec>

<exec dir="${basedir}" executable="${mvn.executable}" failοnerrοr="true">

<arg line="javadoc:javadoc -Dmaven.test.skip=true"/>

</exec>

<exec dir="${basedir}/../restful" executable="${mvn.executable}" failοnerrοr="true">

<arg line="javadoc:javadoc -Dmaven.test.skip=true"/>

</exec>

</target>

3.准备cloudify、将其打包成zip——prepare.cloudify.package.without.unzip

完成工作:

1)执行update.gs.runtime,将Cloudify版本信息加入运行环境

2)执行remove.xap.related.modules,删除./tmp/gigaspaces-cloudify-2.6.0-m1中原xap中的一些模块

3)执行update.lus.groups,更新LUS Groups

4)添加cloudify的各个模块,到. /tmp/gigaspaces-cloudify-2.6.0-m1/

5)将一些recipe放到目标目录下,fetch.recipes.cloudify

6)移除dynamic_props.js

7)拷入notice.txt

8dos2unix操作

9)准备发布版()

10)打包

11)删除临时文件 ./tmp

<target name="prepare.cloudify.package.without.unzip">

<loadproperties srcfile="${build.properties.file}"/>

<ant target="update.gs.runtime" />

<ant target="remove.xap.related.modules" />

<ant target="update.lus.groups"/>

<add.cloudify.modules/>

<ant target="fetch.recipes.cloudify" />

<ant target="replace.xap.content.with.cloudify.related"/>

<ant target="replace.cloudify.notice"/>

<dos2unix dir="${tmp.dir}/${cloudify.installation.dir}" />

<!-- conditional task (with property: publish.cloudify.build) -->

<ant target="prepare.cloudify.for.publish" />

<ant target="archive.cloudify.versions"/>

<delete dir="${tmp.dir}"/>

</target>

3.1 更新Cloudify版本信息,update.gs.runtime

1)拷贝${gigaspaces.related.folder}/src/java下的com/j_spaces/kernel/${platform.verion.file.name}文件到临时源码目录

其中:${gigaspaces.related.folder} =${package.build}/gigaspaces

${package.build}=./package_build

实际上,是将./package_build/gigaspaces/src/java/com/j_spaces/kernel/CloudifyVersion.java文件拷到 src-tmp-dir

2javac 编译这个类文件

3)将其打包为jar,如果存在则更新或覆盖,打包到./tmp/gigaspaces-cloudify-2.6.0-m1/lib/required/gs-runtime.jar

4)将其打包为jar,如果存在则更新或覆盖,打包到./tmp/gigaspaces-cloudify-2.6.0-m1/lib/platform/boot/gs.boot.jar

5)删除临时源文件和目标文件。

<target name="update.gs.runtime">

<!-- define properties for temp directories -->

<property name="src.tmp.dir" value="src-tmp-dir"/>

<property name="dst.tmp.dir" value="dst-tmp-dir"/>

<!-- create temp directories -->

<mkdir dir="${src.tmp.dir}"/>

<mkdir dir="${dst.tmp.dir}"/>

<copy todir="${src.tmp.dir}">

<fileset dir="${gigaspaces.related.folder}/src/java">

<include name="com/j_spaces/kernel/${platform.verion.file.name}"/>

</fileset>

</copy>

<javac

classpath="${tmp.dir}/${cloudify.installation.dir}/lib/required/${gs.runtime.jar}"

nowarn="on"

srcdir="${src.tmp.dir}"

destdir="${dst.tmp.dir}"

debug="on"

memoryMaximumSize="512m"

fork="yes"

source="1.6">

</javac>

<jar jarfile="${tmp.dir}/${cloudify.installation.dir}/lib/required/${gs.runtime.jar}" update="true">

<fileset dir="${dst.tmp.dir}"/>

</jar>

<jar jarfile="${tmp.dir}/${cloudify.installation.dir}/lib/platform/boot/${gs.boot.jar}" update="true">

<fileset dir="${dst.tmp.dir}"/>

</jar>

<!-- delete temp folders -->

<delete dir="${src.tmp.dir}"/>

<delete dir="${dst.tmp.dir}"/>

</target>

3.2 删除xap目录中的一些模块,remove.xap.related.modules

完成工作:1)删除docs

2)删除examples

3)删除tools/benchmarkapachealert-integration

4)删除gslicense.xml

5)删除bin目录下的一些命令

<target name="remove.xap.related.modules">

<delete dir="${tmp.dir}/${cloudify.installation.dir}/docs" />

<delete file="${tmp.dir}/${cloudify.installation.dir}/lib/optional/openspaces/gs-openspaces-sources.zip" />

<delete dir="${tmp.dir}/${cloudify.installation.dir}/examples" />

<delete dir="${tmp.dir}/${cloudify.installation.dir}/tools/benchmark"/>

<delete dir="${tmp.dir}/${cloudify.installation.dir}/tools/apache"/>

<delete dir="${tmp.dir}/${cloudify.installation.dir}/tools/alert-integration"/>

<delete file="${tmp.dir}/${cloudify.installation.dir}/gslicense.xml"/>

<delete>

<fileset dir="${tmp.dir}/${cloudify.installation.dir}/bin" includes="gs-focalserver.*, gsInstance.*,

startJiniTxMahalo.*, puInstance.*, gs-memcached.*, gs-ui.*"/>

</delete>

</target>

3.3 更新LUS(Lookup Service)

完成工作:将./tmp/下的所有shbatxml中的LOOKUPGROUPS=(.*)替换为LOOKUPGROUPS=“${lookup.group}”

<target name="update.lus.groups">

<echo message="Updating LUS Groups in directory: ${tmp.dir}/${cloudify.installation.dir} ..."/>

<property name="lookup.group" value="gigaspaces-${CLOUDIFY}-${cloudify.version}-${cloudify.milestone}"/>

<replaceregexp match="LOOKUPGROUPS=(.*)" replace="LOOKUPGROUPS=&quot;${lookup.group}&quot;">

<fileset dir="${tmp.dir}/${cloudify.installation.dir}" includes="**/*.sh, **/*.bat, **/*.xml"/>

</replaceregexp>

</target>

3.4添加cloudify的各个模块

完成工作:

1)添加USM组件,从./../USM/target/usm.jar拷贝到./tmp/gigaspaces-cloudify-2.6.0-m1/lib/platform/usm/

1.1)添加esm组件,从./../esc/target/esc/lib/*.jar拷贝到./tmp/gigaspaces-cloudify-2.6.0-m1/lib/platform/esm/

2)添加dsl组件,./../dsl/target/dsl.jar拷贝到./tmp/gigaspaces-cloudify-2.6.0-m1/lib/platform/cloudify/

3)添加CLI组件,./../CLI/target/cli.jar./../CLI/cloudify.*拷贝到./tmp/gigaspaces-cloudify-2.6.0-m1/tools/cli/

3.1)添加cli命令到根中的bin,将./package.build/gigaspaces/bin/cloudify.*拷贝到./tmp/gigaspaces-cloudify-2.6.0-m1/bin

4)添加management-space组件,./../management-space/target/management-space.jar拷贝到./tmp/gigaspaces-cloudify-2.6.0-m1/tools/management-space/

5)添加Rest组件,./../restful/target/rest.war拷贝到./tmp/gigaspaces-cloudify-2.6.0-m1/tools/rest/

5.1)添加rest安全配置,./../restful/src/main/webapp/WEB-INF/spring-security.xml拷贝到./tmp/gigaspaces-cloudify-2.6.0-m1/config/security/

5.2)添加WebUI配置,./package.build/gs-webui/config/*.xml拷贝到./tmp/gigaspaces-cloudify-2.6.0-m1/config/

6)添加esc-command组件,./../esc-commands/target/esc-commands.jar拷贝到./tmp/gigaspaces-cloudify-2.6.0-m1/tools/cli/plugins/esc/

6.1)对不同云的支持,./../esc/src/main/resources/clouds/**/*拷贝到./tmp/gigaspaces-cloudify-2.6.0-m1/clouds/

<macrodef name="add.cloudify.modules">

<attribute name="installation.dir" default="${tmp.dir}/${cloudify.installation.dir}"/>

<sequential>

<echo message="Copy USM component"/>

<copy todir="@{installation.dir}/lib/platform/usm" overwrite="true">

<fileset dir="${usm.local.copy}/target/" includes="usm.jar" excludes=".svn"/>

</copy>

<copy todir="@{installation.dir}/lib/platform/esm" overwrite="true">

<fileset dir="${esc.local.copy}/target/esc/lib" includes="*.jar" excludes=".svn"/>

</copy>

<echo message="Copy dsl component"/>

<mkdir dir="@{installation.dir}/lib/platform/cloudify"/>

<copy todir="@{installation.dir}/lib/platform/cloudify" overwrite="true">

<fileset dir="${dsl.local.copy}/target/" includes="dsl.jar" excludes=".svn"/>

</copy>

<echo message="Copy CLOUDIFY CLI component"/>

<copy todir="@{installation.dir}/tools/cli/" overwrite="true">

<fileset dir="${cli.local.copy}/target/" includes="cli.jar" excludes=".svn"/>

<fileset dir="${cli.local.copy}/" includes="cloudify.*" excludes=".svn"/>

</copy>

<copy todir="@{installation.dir}/bin" overwrite="true">

<fileset dir="${gigaspaces.related.folder}/bin" includes="cloudify.*" excludes=".svn"/>

</copy>

<echo message="Copy management-space component"/>

<mkdir dir="@{installation.dir}/tools/management-space/" />

<copy todir="@{installation.dir}/tools/management-space/" overwrite="true">

<fileset dir="${management-space.local.copy}/target/" includes="management-space.jar" excludes=".svn"/>

</copy>

<echo message="Copy CLOUDIFY Rest component"/>

<copy todir="@{installation.dir}/tools/rest/" overwrite="true">

<fileset dir="${restful.local.copy}/target/" includes="rest.war" excludes=".svn"/>

</copy>

<copy todir="@{installation.dir}/config/security/" overwrite="true">

<fileset dir="${restful.local.copy}/src/main/webapp/WEB-INF" includes="spring-security.xml"/>

</copy>

<copy todir="@{installation.dir}/config" overwrite="true">

<fileset dir="${gs-webui.related.folder}/config" includes="*.xml"/>

</copy>

<echo message="Copy CLOUDIFY esc-command component"/>

<copy todir="@{installation.dir}/tools/cli/plugins/esc" overwrite="true">

<fileset dir="${esc-commands.local.copy}/target" includes="esc-commands.jar" excludes=".svn"/>

</copy>

<mkdir dir="@{installation.dir}/clouds/"/>

<copy todir="@{installation.dir}/clouds/" overwrite="true">

<fileset dir="${esc.local.copy}/src/main/resources/clouds" includes="**/*" excludes=".svn"/>

</copy>

</sequential>

</macrodef>

3.5加入recipes

完成工作:1)如果./../../cloudify-recipes目录存在进行后继工作。

2)。。。,我这里不存在前面这个目录

<condition property="recipes.available" value="true">

<available type="dir" file="${recipes.local.copy}"/>

</condition>

<target name="fetch.recipes.cloudify" if="recipes.available">

<echo message="Create and Copy recipes component for Cloudify"/>

<exec executable="${mvn.executable}" dir="${recipes.local.copy}">

<arg line="clean package" />

</exec>

<unzip src="${recipes.local.copy}/target/recipes.zip" dest="${tmp.dir}/${cloudify.installation.dir}/recipes" />

</target>

3.6替换replace.xap.content.with.cloudify.related

1)将./package_build/gigaspaces/START_HERE.htm拷贝到./tmp/gigaspaces-cloudify-2.6.0-m1/

2)将dynamic_props.js移除,重新打包gs-webui-2.6.0-SNAPSHOT.war

<target name="replace.xap.content.with.cloudify.related">

<copy todir="${tmp.dir}/${cloudify.installation.dir}" file="${gigaspaces.related.folder}/START_HERE.htm" overwrite="true"/>

<!-- replace dynamic_props.js in gs-webui war. WAS task doesn't update exisitng warfile

properly if the files that are intended to be added to warfile already appear in it. This is the reason for

temp file creation. -->

<war warfile="${tmp.dir}/${cloudify.installation.dir}/tools/gs-webui/tmp.${gs.webui.war}" needxmlfile="false">

<zipfileset src="${tmp.dir}/${cloudify.installation.dir}/tools/gs-webui/${gs.webui.war}"

includes="**/*" excludes="dynamic_props.js" filemode="775"/>

<zipfileset dir="${gs-webui.related.folder}/war" />

</war>

<delete file="${tmp.dir}/${cloudify.installation.dir}/tools/gs-webui/${gs.webui.war}"/>

<move file="${tmp.dir}/${cloudify.installation.dir}/tools/gs-webui/tmp.${gs.webui.war}" tofile="${tmp.dir}/${cloudify.installation.dir}/tools/gs-webui/${gs.webui.war}"/>

</target>

3.7 replace.cloudify.notice

完成工作:拷入notice.txt文件

<target name="replace.cloudify.notice">

<copy todir="${tmp.dir}/${cloudify.installation.dir}" file="${gigaspaces.related.folder}/notice.txt" overwrite="true"/>

</target>

3.8 dos2unix操作

<dos2unix dir="${tmp.dir}/${cloudify.installation.dir}" />

<macrodef name="dos2unix">

<attribute name="dir"/>

<sequential>

<!-- Replaces EOLs with LF characters and removes eof characters

from the shell scripts. Tabs and spaces are left as is. -->

<fixcrlf srcdir="@{dir}"

eol="lf"

eof="remove"

includes="**/*.sh"

defaultexcludes="no"

/>

<!-- Replaces all EOLs with cr-lf pairs in the batch files.

Tabs and spaces are left as is. EOF characters are left alone if run on DOS systems,

and are removed if run on Unix systems. -->

<fixcrlf srcdir="@{dir}"

eol="crlf"

includes="**/*.bat"

defaultexcludes="no"

/>

</sequential>

</macrodef>

3.9准备发布cloudify

1)更新本地文件中的cloudifyUrl

2)提交文件

<target name="prepare.cloudify.for.publish" description="publish cloudify build to gigaspaces repository" if="publish.cloudify.build">

<ant target="update.cloudify.service.configuration.url"/>

<ant target="commit.service.configuration" />

</target>

3.9.1 update.cloudify.service.configuration.url

完成工作:encode cloudify.url,更新源文件中的cloudifyUrl

1cloudify.url =http://repository.cloudifysource.org/org/cloudifysource/2.6.0-SNAPSHOT/gigaspaces-cloudify-2.6.0-m1-b4980-309.zip

2groovy.dir=./tmp/gigaspaces-cloudify-2.6.0-m1/tools/groovy/bin

3groovy.path=${groovy.dir}/groovy.bat

4)执行groovy -e "println(java.net.URLEncoder.encode('${cloudify.url}'))"

5)替换./tmp/gigaspaces-cloudify-2.6.0-m1/clouds/目录下的**/*-cloud.groovy 中的cloudifyUrl

6)替换${esc.local.copy}/src/main/resources/clouds/目录下的**/*-cloud.groovy 中的cloudifyUrl

<target name="update.cloudify.service.configuration.url" if="release.build">

<echo message="Updating ServiceConfiguration in directory: ${tmp.dir}/${cloudify.installation.dir}/clouds/ ..."/>

<property name="cloudify.url" value="${cloudify.cdn.publish.url}/${cloudify.put.target}" />

<!-- Here we encode cloudify.url -->

<property name="groovy.dir" value="${tmp.dir}/${cloudify.installation.dir}/tools/groovy/bin" />

<condition property="groovy.path" value="${groovy.dir}/groovy.bat">

<os family="windows"/>

</condition>

<condition property="groovy.path" value="${groovy.dir}/groovy">

<os family="unix"/>

</condition>

<exec executable="${groovy.path}" outputproperty="cloudify.url.encoded">

<env key="JAVA_HOME" value="${java.home}" />

<arg value="-e" />

<arg value="&quot;println(java.net.URLEncoder.encode('${cloudify.url}'))&quot;" />

</exec>

<!-- Update files in ${tmp.dir}/${cloudify.installation.dir} and in source folders -->

<replaceregexp byline="true"

match="cloudifyUrl &quot;(.*)&quot;"

replace="cloudifyUrl &quot;${cloudify.url}&quot;" >

<fileset

dir="${tmp.dir}/${cloudify.installation.dir}/clouds/"

includes="**/*-cloud.groovy" />

<fileset

dir="${esc.local.copy}/src/main/resources/clouds"

includes="**/*-cloud.groovy" />

</replaceregexp>

</target>

3.9.2 commit.service.configuration

完成工作:提交文件

1)执行 git checkout ${branchname} 工作目录./../esc

2)执行 git pull

3)执行 git add .

4)执行 git commit –m Update cloudify url

5)执行 git push

<target name="commit.service.configuration">

<exec executable="git" dir="${esc.local.copy}">

<arg value="checkout" />

<arg value="${branchname}" />

</exec>

<exec executable="git" dir="${esc.local.copy}">

<arg line="pull" />

</exec>

<exec executable="git" dir="${esc.local.copy}">

<arg line="add ." />

</exec>

<exec executable="git" dir="${esc.local.copy}">

<arg value="commit" />

<arg value="-m" />

<arg value="Update cloudify url" />

</exec>

<exec executable="git" dir="${esc.local.copy}">

<arg value="push" />

</exec>

</target>

3.10打包

完成工作:打包,添加javadoc

1) 删除 ./releases/build_4980-309/目录

2) 创建 ./releases/build_4980-309/cloudify/1.5/目录

3) 将 ./tmp/**/*打包为./releases/build_4980-309/cloudify/1.5/gigaspaces-cloudify-2.6.0-m1-b4980-309.zip

4) 将zip打包成tar

5) 添加apidocs包到./releases/build_4980-309/docs/cloudify-javadoc.zip

6) 添加rest文档restdoclet.html

<target name="archive.cloudify.versions">

<delete dir="${releases.dir}/build_${cloudify.build.number}"/>

<mkdir dir="${releases.dir}/build_${cloudify.build.number}/${cloudify}/1.5"/>

<zip destfile="${releases.dir}/build_${cloudify.build.number}/${cloudify}/1.5/gigaspaces-${cloudify}-${cloudify.version}-${cloudify.milestone}-b${cloudify.build.number}.zip">

<zipfileset dir="${tmp.dir}" includes="**/*" filemode="775"/>

</zip>

<tar destfile="${releases.dir}/build_${cloudify.build.number}/${cloudify}/1.5/gigaspaces-${cloudify}-${cloudify.version}-${cloudify.milestone}-b${cloudify.build.number}.tar.gz" compression="gzip">

<zipfileset src="${releases.dir}/build_${cloudify.build.number}/${cloudify}/1.5/gigaspaces-${cloudify}-${cloudify.version}-${cloudify.milestone}-b${cloudify.build.number}.zip"/>

</tar>

<!-- Add Cloudify Javadoc archive to Cloudify/docs folder. If the folder doesn't exist please run: mvn javadoc:javadoc -->

<mkdir dir="${releases.dir}/build_${cloudify.build.number}/docs" />

<zip file="${releases.dir}/build_${cloudify.build.number}/docs/${cloudify}-javadoc.zip">

<fileset dir="${basedir}/target/site/apidocs"/>

</zip>

<mkdir dir="${releases.dir}/build_${cloudify.build.number}/docs/restdoclet" />

<copy todir="${releases.dir}/build_${cloudify.build.number}/docs/restdoclet" >

<fileset file="${restful.local.copy}/target/site/restdoclet/restdoclet.html"/>

<fileset file="${restful.local.copy}/src/main/webapp/resources/restdoclet/restdoclet.css"/>

</copy>

</target>

转载于:https://my.oschina.net/hjswust/blog/130218

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值