1.簡介說明
一般我們在hot-deploy下部署應用是,可以通過ant的create-component這個命令來創建,這種方法的好處是自動創建的會節省自己很多時間,並且避免一些不必要的錯誤,下面就從簡述一下ant構建,以及模塊的創建
聲明:禁止轉載,不是因爲文章好不好,而是對於百度搜索,一搜一大片一樣,很煩
2.軟件版本
ofbiz-trunk
3.ant命令
ant是一種自動構建工具,其環境配置跟java環境差不多,配置全局變量後,運行xml文件對應的target就可以執行相關的操作。
但ant不是我主要要講的東西,只簡要介紹一些基本語法:
target:是一個容器,指令集合,一個事務
copy:拷貝單個文件到指定路徑
delete:刪除文件
參考資料:http://blog.csdn.net/linchaolong/article/details/45057257
4.模塊創建
運行buil.xmld下的create-component,而後輸入對應值
然後 擊ok對應的模塊就會創建出來,文件結構效果如下:
|____build.xml
|____config
| |____resourec-nameUiLabels.xml
|____data
| |____helpdata
| | |____HELP_resourec-name.xml
| |____resourec-nameDemoData.xml
| |____resourec-nameSecurityGroupDemoData.xml
| |____resourec-nameSecurityPermissionSeedData.xml
| |____resourec-nameTypeData.xml
|____documents
| |____resourec-name.xml
|____dtd
|____entitydef
| |____entitymodel.xml
|____lib
|____ofbiz-component.xml
|____patches
| |____production
| |____qa
| |____test
|____script
|____servicedef
| |____services.xml
|____src
|____testdef
| |____resourec-nameTests.xml
|____webapp
| |____webapp-name
| | |____error
| | | |____error.jsp
| | |____index.jsp
| | |____WEB-INF
| | | |____actions
| | | |____controller.xml
| | | |____web.xml
|____widget
| |____CommonScreens.xml
| |____resourec-nameForms.xml
| |____resourec-nameMenus.xml
| |____resourec-nameScreens.xml
5.create- component命令簡述
<target name="create-component"
description="Create the layout of an OFBiz component in the hot-deployfolder.">
<!--提供組件名資源文件名等輸入文本框-->
<inputaddproperty="component-name"message="Component name:(e.g. mycomponent) [Mandatory]"/>
<input addproperty="component-resource-name" message="Component resource name: (e.g. MyComponent) [Mandatory]"/>
<input addproperty="webapp-name" message="Webapp name: (e.g. mycomponent) [Mandatory]"/>
<input addproperty="base-permission" message="Base permission: (e.g. MYCOMPONENT) [Mandatory]"/>
<echo>Thefollowing hot-deploy component will be created:
Name: ${component-name}
Resource Name:${component-resource-name}
Webapp Name: ${webapp-name}
Base permission:${base-permission}
Folder:${basedir}/hot-deploy/${component-name}
</echo>
<!--確認組件是否被創建-->
<inputaddproperty="confirm-component-creation"message="Confirm: " defaultvalue="N" validargs="Y,N,y,n"/>
<!--進行信息驗證-->
<failmessage="Component creationcancelled by the user.">
<condition>
<equals arg1="${confirm-component-creation}" arg2="N" casesensitive="false"/>
</condition>
</fail>
<fail message="Component name is mandatory">
<condition>
<equals arg1="${component-name}" arg2="" casesensitive="false" trim="yes"/>
</condition>
</fail>
<fail message="Resource name is mandatory">
<condition>
<equals arg1="${component-resource-name}" arg2="" casesensitive="false" trim="yes"/>
</condition>
</fail>
<fail message="Webapp name is mandatory">
<condition>
<equals arg1="${webapp-name}" arg2="" casesensitive="false" trim="yes"/>
</condition>
</fail>
<!--過濾器集,將文件中具體內容進行轉化-->
<filtersetid="replacePlaceholders">
<filter token="component-name" value="${component-name}"/>
<filter token="component-resource-name" value="${component-resource-name}"/>
<filter token="base-permission" value="${base-permission!}"/>
<filter token="webapp-name" value="${webapp-name}"/>
</filterset>
<!--創建文件-->
<mkdirdir="${basedir}/hot-deploy/${component-name}"/>
<mkdir dir="${basedir}/hot-deploy/${component-name}/config"/>
<mkdir dir="${basedir}/hot-deploy/${component-name}/data"/>
<mkdir dir="${basedir}/hot-deploy/${component-name}/data/helpdata"/>
<mkdir dir="${basedir}/hot-deploy/${component-name}/dtd"/>
<mkdir dir="${basedir}/hot-deploy/${component-name}/documents"/>
<mkdir dir="${basedir}/hot-deploy/${component-name}/entitydef"/>
<mkdir dir="${basedir}/hot-deploy/${component-name}/lib"/>
<mkdir dir="${basedir}/hot-deploy/${component-name}/patches"/>
<mkdir dir="${basedir}/hot-deploy/${component-name}/patches/test"/>
<mkdir dir="${basedir}/hot-deploy/${component-name}/patches/qa"/>
<mkdir dir="${basedir}/hot-deploy/${component-name}/patches/production"/>
<mkdir dir="${basedir}/hot-deploy/${component-name}/script"/>
<mkdir dir="${basedir}/hot-deploy/${component-name}/servicedef"/>
<mkdir dir="${basedir}/hot-deploy/${component-name}/src"/>
<mkdir dir="${basedir}/hot-deploy/${component-name}/testdef"/>
<mkdir dir="${basedir}/hot-deploy/${component-name}/webapp"/>
<mkdir dir="${basedir}/hot-deploy/${component-name}/webapp/${webapp-name}"/>
<mkdir dir="${basedir}/hot-deploy/${component-name}/webapp/${webapp-name}/error"/>
<mkdir dir="${basedir}/hot-deploy/${component-name}/webapp/${webapp-name}/WEB-INF"/>
<mkdir dir="${basedir}/hot-deploy/${component-name}/webapp/${webapp-name}/WEB-INF/actions"/>
<mkdir dir="${basedir}/hot-deploy/${component-name}/widget/"/>
<1--拷貝文件模板-->
<copyfile="${basedir}/framework/resources/templates/ofbiz-component.xml"tofile="${basedir}/hot-deploy/${component-name}/ofbiz-component.xml"encoding="utf-8">
<filterset refid="replacePlaceholders"/>
</copy>
<copy file="${basedir}/framework/resources/templates/build.xml" tofile="${basedir}/hot-deploy/${component-name}/build.xml"encoding="utf-8">
<filterset refid="replacePlaceholders"/>
</copy>
<copy file="${basedir}/framework/resources/templates/TypeData.xml" tofile="${basedir}/hot-deploy/${component-name}/data/${component-resource-name}TypeData.xml"encoding="utf-8">
<filterset refid="replacePlaceholders"/>
</copy>
<copy file="${basedir}/framework/resources/templates/SecurityPermissionSeedData.xml"tofile="${basedir}/hot-deploy/${component-name}/data/${component-resource-name}SecurityPermissionSeedData.xml"encoding="utf-8">
<filterset refid="replacePlaceholders"/>
</copy>
<copy file="${basedir}/framework/resources/templates/SecurityGroupDemoData.xml"tofile="${basedir}/hot-deploy/${component-name}/data/${component-resource-name}SecurityGroupDemoData.xml"encoding="utf-8">
<filterset refid="replacePlaceholders"/>
</copy>
<copy file="${basedir}/framework/resources/templates/DemoData.xml" tofile="${basedir}/hot-deploy/${component-name}/data/${component-resource-name}DemoData.xml"encoding="utf-8">
<filterset refid="replacePlaceholders"/>
</copy>
<copy file="${basedir}/framework/resources/templates/HELP.xml" tofile="${basedir}/hot-deploy/${component-name}/data/helpdata/HELP_${component-resource-name}.xml"encoding="utf-8">
<filterset refid="replacePlaceholders"/>
</copy>
<copy file="${basedir}/framework/resources/templates/document.xml" tofile="${basedir}/hot-deploy/${component-name}/documents/${component-resource-name}.xml"encoding="utf-8">
<filterset refid="replacePlaceholders"/>
</copy>
<copy file="${basedir}/framework/resources/templates/entitymodel.xml" tofile="${basedir}/hot-deploy/${component-name}/entitydef/entitymodel.xml"encoding="utf-8">
<filterset refid="replacePlaceholders"/>
</copy>
<copy file="${basedir}/framework/resources/templates/services.xml" tofile="${basedir}/hot-deploy/${component-name}/servicedef/services.xml"encoding="utf-8">
<filterset refid="replacePlaceholders"/>
</copy>
<copy file="${basedir}/framework/resources/templates/Tests.xml" tofile="${basedir}/hot-deploy/${component-name}/testdef/${component-resource-name}Tests.xml"encoding="utf-8">
<filterset refid="replacePlaceholders"/>
</copy>
<copy file="${basedir}/framework/resources/templates/UiLabels.xml" tofile="${basedir}/hot-deploy/${component-name}/config/${component-resource-name}UiLabels.xml"encoding="utf-8">
<filterset refid="replacePlaceholders"/>
</copy>
<copy file="${basedir}/framework/resources/templates/index.jsp" tofile="${basedir}/hot-deploy/${component-name}/webapp/${webapp-name}/index.jsp"encoding="iso-8859-1">
<filterset refid="replacePlaceholders"/>
</copy>
<copy file="${basedir}/framework/resources/templates/error.jsp" tofile="${basedir}/hot-deploy/${component-name}/webapp/${webapp-name}/error/error.jsp"encoding="iso-8859-1">
<filterset refid="replacePlaceholders"/>
</copy>
<copy file="${basedir}/framework/resources/templates/controller.xml" tofile="${basedir}/hot-deploy/${component-name}/webapp/${webapp-name}/WEB-INF/controller.xml"encoding="utf-8">
<filterset refid="replacePlaceholders"/>
</copy>
<copy file="${basedir}/framework/resources/templates/web.xml" tofile="${basedir}/hot-deploy/${component-name}/webapp/${webapp-name}/WEB-INF/web.xml"encoding="utf-8">
<filterset refid="replacePlaceholders"/>
</copy>
<copy file="${basedir}/framework/resources/templates/CommonScreens.xml" tofile="${basedir}/hot-deploy/${component-name}/widget/CommonScreens.xml"encoding="utf-8">
<filterset refid="replacePlaceholders"/>
</copy>
<copy file="${basedir}/framework/resources/templates/Screens.xml" tofile="${basedir}/hot-deploy/${component-name}/widget/${component-resource-name}Screens.xml"encoding="utf-8">
<filterset refid="replacePlaceholders"/>
</copy>
<copy file="${basedir}/framework/resources/templates/Menus.xml" tofile="${basedir}/hot-deploy/${component-name}/widget/${component-resource-name}Menus.xml"encoding="utf-8">
<filterset refid="replacePlaceholders"/>
</copy>
<copy file="${basedir}/framework/resources/templates/Forms.xml" tofile="${basedir}/hot-deploy/${component-name}/widget/${component-resource-name}Forms.xml"encoding="utf-8">
<filterset refid="replacePlaceholders"/>
</copy>
<echo>Componentsuccessfully created in folder ${basedir}/hot-deploy/${component-name}.
Restart OFBiz and then visitthe URL: http://localhost:8080/${webapp-name}
</echo>
</target>
6.文件值替換(過濾器集)
剛纔上文輸入的文本框值,不僅在創建文件是路徑值替換,同時也替換裏面具體的值,就拿ofbiz-component文件講述
文件位置
/project/ofbiz/ofbiz-trunk/framework/resources/templates/ofbiz-component.xml
<?xml version="1.0" encoding="UTF-8"?>
<ofbiz-component name="@component-name@"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/ofbiz-component.xsd">
<!-- define resource loaders; most common is to use the component resource loader -->
<resource-loader name="main" type="component"/>
<!-- place the config directory on the classpath to access configuration files -->
<classpath type="dir" location="config"/>
<classpath type="dir" location="dtd"/>
<!-- load single or multiple external libraries -->
<classpath type="jar" location="build/lib/*"/>
<classpath type="jar" location="lib/*"/>
<!-- entity resources: model(s), eca(s), group, and data definitions -->
<entity-resource type="model" reader-name="main" loader="main" location="entitydef/entitymodel.xml"/>
<!-- <entity-resource type="eca" reader-name="main" loader="main" location="entitydef/eecas.xml"/> -->
<entity-resource type="data" reader-name="seed" loader="main" location="data/@[email protected]"/>
<entity-resource type="data" reader-name="seed" loader="main" location="data/@[email protected]"/>
<entity-resource type="data" reader-name="demo" loader="main" location="data/@[email protected]"/>
<entity-resource type="data" reader-name="demo" loader="main" location="data/@[email protected]"/>
<!-- service resources: model(s), eca(s) and group definitions -->
<service-resource type="model" loader="main" location="servicedef/services.xml"/>
<!--
<service-resource type="eca" loader="main" location="servicedef/secas.xml"/>
<service-resource type="group" loader="main" location="servicedef/groups.xml"/>
-->
<test-suite loader="main" location="testdef/@[email protected]"/>
<!-- web applications; will be mounted when using the embedded container -->
<webapp name="@webapp-name@"
title="@component-resource-name@"
server="default-server"
location="webapp/@webapp-name@"
base-permission="OFBTOOLS,@base-permission@"
mount-point="/@webapp-name@"/>
</ofbiz-component>
效果代碼:
<?xml version="1.0" encoding="UTF-8"?>
<ofbiz-component name="component-name"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/ofbiz-component.xsd">
<!-- define resource loaders; most common is to use the component resource loader -->
<resource-loader name="main" type="component"/>
<!-- place the config directory on the classpath to access configuration files -->
<classpath type="dir" location="config"/>
<classpath type="dir" location="dtd"/>
<!-- load single or multiple external libraries -->
<classpath type="jar" location="build/lib/*"/>
<classpath type="jar" location="lib/*"/>
<!-- entity resources: model(s), eca(s), group, and data definitions -->
<entity-resource type="model" reader-name="main" loader="main" location="entitydef/entitymodel.xml"/>
<!-- <entity-resource type="eca" reader-name="main" loader="main" location="entitydef/eecas.xml"/> -->
<entity-resource type="data" reader-name="seed" loader="main" location="data/resourec-nameTypeData.xml"/>
<entity-resource type="data" reader-name="seed" loader="main" location="data/resourec-nameSecurityPermissionSeedData.xml"/>
<entity-resource type="data" reader-name="demo" loader="main" location="data/resourec-nameSecurityGroupDemoData.xml"/>
<entity-resource type="data" reader-name="demo" loader="main" location="data/resourec-nameDemoData.xml"/>
<!-- service resources: model(s), eca(s) and group definitions -->
<service-resource type="model" loader="main" location="servicedef/services.xml"/>
<!--
<service-resource type="eca" loader="main" location="servicedef/secas.xml"/>
<service-resource type="group" loader="main" location="servicedef/groups.xml"/>
-->
<test-suite loader="main" location="testdef/resourec-nameTests.xml"/>
<!-- web applications; will be mounted when using the embedded container -->
<webapp name="webapp-name"
title="resourec-name"
server="default-server"
location="webapp/webapp-name"
base-permission="OFBTOOLS,${base-permission!}"
mount-point="/webapp-name"/>
</ofbiz-component>
就是這些值都被替換成了開始文本框的值,從而實現文件的拷貝,其它模板文件也在其同級目錄下。
7.總結
這就是創建組件的大概邏輯,詳情研究代碼,也可以自己模仿其定製自己想創建的模塊結構,這樣就不必手動創建,是個很方便的過程