- 浏览: 1588281 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
nich002:
原网站失效了。撸主简单粗暴的复制过来,可读性极差!差评!
Apache配置详解(最好的APACHE配置教程) -
107x:
不错,谢谢!
LINUX下查看文件夹下的文件个数! -
Hypereo:
好你妹,连个格式都没有!
Apache配置详解(最好的APACHE配置教程) -
resteater:
代码排版感觉有点乱!收发信息代码可读性不强!请问第一次发服务器 ...
java socket例子 -
resteater:
代码排版感觉有点乱!收发信息代码可读性不强!请问第一次发服务器 ...
java socket例子
本文主要介绍 Ant 在多用户开发的情况下,如何用 Eclipse,并且根据不同的目标环境编译不同的部署包。文中首先介绍一个场景,给出在开发、编译、部署过程中遇到的问题;然后介绍如何用 Eclipse 来简化你的 Ant 开发过程;文章的最后解释如何通过编写有效的 Ant 脚本来提高你的工作效率。
读者定位为具有 Java 和 Ant 使用经验的开发人员。
读者可以学习到如何使用 Ant 解决一些多用户开发环境中,根据不同的目标环境编译成不同部署包的问题。
现在有一个 web 项目,是多人进行开发的,通过 CVS 来管理。另外该项目还有一些测试人员,他们测试部署在测试服务器上的应用程序,发现 bug 后通过 bug 管理系统通知开发人员,在开发人员修复 bug 并经过本地测试后,由专门的人负责检出(check out)代码,编译打包后部署到测试服务器上。
该项目的成员小A就是负责检出代码、编译打包,并部署到服务器上的人。除了这个任务之外,他还是该项目的编程人员。在项目进入测试阶段后,小A在得到组中别的成员修复了 bug 并且检入(check in)了代码的消息后(也有可能是小A自己检入了代码),小A首先更新本地的代码,先在本地做测试,确认修复了 bug 后打成 WAR 包部署到测试服务器上,并通知测试人员已经修复了 bug,让测试人员继续进行测试。
在该项目中,有一些为测试方便开发而写的代码和页面,比如跳过用户认证,但是在部署到测试机环境的时候,需要删除这些代码和页面;另外作为一个具有灵活性和扩展性的应用程序,又有一些配置文件,配置文件中的值会根据环境的改变而变动。例如,在项目中使用了 Log4j 记录日志,需要给 Log4j 指定日志文件的保存路径,本地程序员开发的时候用的是 Windows 系统,给 Log4j 指定的也是 Windows 的文件系统,在测试阶段的时候,需要部署到 Linux 系统中,那么日志的保存路径也需要做相应的改动。部署到测试服务器上的时候,除了 Log4j 需要改之外,还有很多别的配置项目也需要变动,并且分散在各个 package 中。小A的烦恼也随之而来,每次他在做完本地测之后,就根据测试机的需要逐个找配置文件,更改相应的值,并删除那些为测试方便写的代码和页面,每天可能根据需要做好几次这样的事情,最烦的是他在快做完对测试机环境更改的时候,某开发人员突然通知小A说:“我又改了一点代码,刚检入,你再重打一个包吧。”,小A又不得不从头开始做新一轮的检出代码、本地测试、更改配置文件、删除不需要的文件、打包部署的工作。另外小A在测试阶段的后期被通知要求除了每次生成一个测试环境的 WAR 包外还必须生成一个在产品环境下的 WAR 包,他做的事情就更多了。
从上面的场景可以看出,小A的工作效率低而且容易出错,甚至有可能导致整个项目的工作效率低下。其实可以通过 Ant 来帮助小A快速而且有效地完成这个工作。在 Ant 中,根据目标环境的需要,可以把所有要更改的配置文件的项目集中写到某个配置文件中。这样根据不同的目标环境得到不同的配置文件,Ant 在编译包时根据不同的目标环境切换不同的配置文件即可。比如小A现在碰到的有 3 中环境:开发环境、测试环境以及产品环境,根据这三种环境可以生成三个不同的配置文件:develop_deploy.property、test_deploy. property和product_deploy. property,当小A想生成不同的包时只需在这三个配置文件之间切换就可以了。
在正式开始编写脚本之前,我们需要下载安装相应的软件。
- Eclipse:为了使 Ant 的开发更加简单,我们选择了 Eclipse3.1 作为开发环境。当然你可以使用任何你喜欢的文本编辑工具来开发你的 Ant。Eclipse 的最新版本可以在 http://eclipse.org/ 上下载。
- Ant:Ant 是基于 Java 的编译工具,它就像 C/C++ 中的 make,但是没有 make 那样难用。Ant 的最新版本可以在 http://ant.apache.org/bindownload.cgi 上下载。如果你用 Eclipse 来开发 Ant,则不用去单独下载 Ant,因为在 Eclipse 中已经集成了 Ant。
- CVS 客户端(cvs.exe):CVS 可以在 http://www.nongnu.org/cvs/ 上下载
![]() ![]() |
![]()
|
如果你使用 Eclipse 来编写 Ant,建议使用 Eclipse 3.1 以后的版本。除了以前 Ant 编辑器提供的语法高亮,提示语法错误等功能外,Eclipse3.1 版本增加了许多新的功能。比如:脚本代码的折叠;快速定位某属性或者目标(target)段的定义;在同一 builder 文件中重构属性名和目标名(快捷方式Alt + Shift +R);调试 Ant 脚本等。
下面我们就来看看 Eclipse 3.1 中对 Ant 的支持
-
打开“File”-“New”-“Project”-“Simple”-“Project”,点击“Next”,输入工程名“Ant”,然后点击直到“Finish”
-
在新建的 Ant 工程中,新建 Test.xml,并且拷贝下面的脚本。该段脚本的内容就不做介绍了,我们主要看 Eclipse 提供了哪些功能。注意这时候打开的并不是 Ant 编辑器,将内容拷贝进去之后,关掉打开的“Test.xml”,然后再重新打开它,这样 Eclipse 就会用 Ant 编辑器打开它,并且也语法高亮了。
<!----> <project name="Test" basedir="." default="init"></project> <property name="test" value="test"></property> <target name="init"></target> <echo></echo>${test}
-
自动提示和代码折叠功能。如果是 Ant 内置的命令或者前面已经定义的变量,编辑器会自动提示;编辑器右边的加/减号可以代码折叠。如下所示:
-
快速定位目标(target)或者定义变量处。在上图中,将鼠标移至 default=”init” 中的 init 上之后,按下 ctrl 键,鼠标变成手状,单击就可以定位到定义该目标的地方
-
快速重构目标名或者属性名。选中目标/属性名,按下 Alt + Shift + R,然后键入你要修改后的值,所有引用到的地方都会随之改动。如下图所示,选中 init 后,按下快捷键,改成 initial:
-
调试 Ant 脚本。在标签“<target name="..”的左边设置一断点,然后在编辑器中右击,出现的菜单中选“Debug" p="" java=""></target>
这是调试窗口,这里可以选择单步跟进、跳出等:
下面是运行时变量窗口。可以看到 test 变量的值是“test”:
运行结果窗口:
由此可见,如果使用好 Eclipse Ant 编辑器所提供强大的功能的话能大大提高写 Ant 脚本的效率。
![]() ![]() |
![]()
|
刚开始写 Ant 的初学者可能会把所有的信息都放在 build.xml 中,下面就是这样的一个例子。
<project name="testBuild" basedir="." default="compile"></project> <target name="init"></target> <mkdir></mkdir> <target name="compile" depends="init"></target> <javac destdir="c:/temp/dest/testProj " srcdir="c:/temp/src/testProj"></javac> <echo></echo>Build into c:/temp/dest/testProj, successfully. |
在上面的例子中,所有的路径信息都是写在 build.xml 中。但是 Ant 脚本可能在不同的机器或者不同的系统上运行,也有可能一些值需要根据环境的不同而变化,在 Ant 中可以把所有这些可能变化的地方都放到一个配置文件中,然后在 Ant 脚本中引用这个配置文件就可以了,针对上面的例子,如下所示:
<project name="testBuild" basedir="." default="compile"></project> <property file="build.properties"></property> <target name="init"></target> <mkdir></mkdir> <target name="compile" depends="init"></target> <javac destdir="${dest.dir}" srcdir="${src.dir}"></javac> <echo></echo>Build into ${dest.dir}, successfully. build.properties的内容: dest.dir=c:/temp/dest/testProj src.dir=c:/temp/src/testProj |
如果想在 Ant 脚本中引用值的话,只需用$符号开头,在一对"{}"中写入要引用的键值。如上例中,需要引用编译的目标路径用"${dest.dir}"。
![]() ![]() |
![]()
|
使用 Ant 任务从 CVS 中检出(check out)源代码,并编译打包
Ant 中提供了 cvs 任务(Task)可以从 CVS 服务器中检出资源(注意:在使用 Ant 的 cvs 任务之前,请先将 cvs.exe 下载到你的机器,并且将它添加到你本地的 PATH 环境变量中,然后重新启动 Eclipse。否则在执行下面脚本的时候就会得到 error=2 的错误)。cvs 的可选用属性很多,在这里介绍经常使用到的几个属性。从 CVS 中检出资源一般需要指定:
- CVS 所在的服务器地址:目标 CVS 服务器地址
- 用户名:登录该 CVS 服务器你指定的用户名
- 密码:登录该 CVS 服务器需要的密码
- 库路径(Repository Path):服务器中的库路径
- 模块名:当前需要检出的模块名,一般都是以工程的名字作为模块名
- 标签名:需要从 CVS 中检出哪个标签
在介绍使用 Ant 的 cvs 之前,先说一下本地的目录结构。在 C 盘的 temp 目录下,分别有四个目录,如下所示:
- build 目录:放编译后的类以及资源文件
- dist 目录:放生成的 jar 文件或者 war 文件
- lib 目录:放在编译过程中需要用到的 jar 文件
- src 目录:放从 cvs 中检出的源文件(包括 JSP 等)
在 Ant 中这样写就可以从中检出资源:
<cvs failonerror="true" dest=" c:/temp/src/testProj " package="TestProj" cvsroot=":pserver:username:pwd@cvs.server:/home/testPath"></cvs> |
这段脚本片断的意思就是从叫"cvs.server"的服务器中,用用户名是 username、密码为 pwd 的用户检出在库路径是 /home/testPath 下的 TestProj 模块(项目),检出后的资源放入本地目录 c:/temp/src/testProj 中。在上面这段脚本中,可以看到有很多值可能会根据不同的环境或者用户随之改变的,比如用户名和密码等;而且从脚本的重复可利用性来说,需要把有些值抽出来放到配置文件中,如服务器的地址和库路径等。因此把这些可能需要更改的地方放到 property 文件中,效果会更好。改完后的完整 Ant 脚本如下所示:
<!----> <project name="testWeb" basedir="." default="checkout"></project> <target name="checkout"></target> <property file="TestWeb.properties"></property> <cvs failonerror="true" dest="${src.dir}" package="${cvs.projectName}" cvsroot="${cvs.root}" tag="${cvs.tag}"></cvs> |
对应的 TestWeb.properties 文件内容如下所示:
base.dir=c:/temp/ src.dir=${base.dir}/src cvs.server=cvs.server cvs.user=username cvs.pw=pwd cvs.repositoryPath=/home/testPath cvs.projectName=TestProj cvs.root=:pserver:${cvs.user}:${cvs.pw}@${cvs.server}:${cvs.repositoryPath} cvs.tag= |
在检出了资源后,需要对其进行编译打包。为了使 Ant 脚本更加具有可读性和灵活性,我们需要对上面的 Ant 脚本进行一些改动。首先将 Ant 脚本中进行分段,如下所示:
<!----> <project name="testWeb" basedir="." default="all"></project> <target name="all" depends="init,clean,checkout,build"></target> <!----> <target name="init"></target> <!----> <target name="clean"></target> <!----> <target name="checkout"></target> <!----> <target name="build"></target> <!----> |
上面的脚本中,总共分成了5个目标(target),脚本的入口点是"all",all 按顺序调用 init,clean,checkout,build。其中:
- init 是用来做初始化属性文件和设置 classpath 等设置初始条件的事情
- clean 用来删除上一次留下的没用的目录和文件
- checkout 已经介绍过了,是用来从 CVS 中检出资源
- build 用来编译源文件并打 WAR 包到指定的目录
详细的 Ant 脚本可以参见随本文所附的 TestWeb.xml 和 TestWeb.properties。
![]() ![]() |
![]()
|
在前面介绍的 Ant 脚本中,根据从 CVS 服务器中检出的资源打成了一个默认的 war 包,并没有考虑根据不同的目标环境来生成不同的包,从下一节开始介绍如何根据不同的环境来生成不同的部署包。
还有一个问题是:为什么需要把从 CVS 中检出资源、编译的过程跟根据目标环境打包的过程分开?
这是因为本身 CVS 检出资源是需要花一定的时间,如果资源比较多这个过程就会花费挺长时间;另外,在多人开发的情况下必须保证在生成不同的部署包的时候是用的是同一套代码生成的,否则会出现各个服务器上运行的版本不一致,如果检出资源、编译的过程跟生成包的脚本一起执行的话就会出现这个问题(比如小A在测试服务器测试通过的时候之后,再生成一个在产品环境下的部署包,如果分两次从 CVS 服务器中检出资源的话,在此期间可能会有开发人员往 CVS 服务器中检入代码,导致生成的版本不一致),因此,必须将这两个过程分开执行。现在我们开始建立另外一个 Ant 脚本文件,叫 deploy.xml,专门用来生成包;另外与 deploy.xml 相对应的还有一个 deploy.properties 文件。在 deploy.xml 中会引用 deploy.properties 文件。另外根据在前面的场景中碰到的环境,创建三个不同的属性文件, develop_deploy.property、test_deploy. property 和 product_deploy. Property,在打包的时候,根据不同的目标环境,将相应属性文件中的内容拷贝至 deploy.properties 文件中(或者也可以直接在 deploy.xml 中直接切换不同的属性文件),然后在 Eclipse 中直接执行 deploy.xml;如果在命令行中,可以用下面的命令来执行:
ant –f deploy.xml |
![]() ![]() |
![]()
|
我们首先得建立一个目录(这里是 unpack)用来存放解压后的文件。Ant 中提供了 unzip 命令用来解压 ear/war/jar 包。除了这个目录外,根据不同的目标环境,在运行目录下建立一个与目标环境相对应的目录,重新打好的 war 包就放在这个目录下,比如针对场景中的情况,如果需要创建一个产品环境下的部署包,我们可以建立一个 TestWebProduct 目录,目录名写在配置文件中(${pack.base.dir})。
<target name="init"></target> <echo></echo>init in deploy <property file="deploy.properties"></property> <delete failonerror="false"></delete> <delete failonerror="false"></delete> <mkdir></mkdir> <mkdir></mkdir> <target name="unpack"></target> <echo></echo>unpack the ${war.name} <copy file="${dest.dir}/${war.name}" todir="${unpack.base.dir}"></copy> <unzip dest="${unpack.base.dir}/${projectName}" src="${unpack.base.dir}/${war.name}"></unzip> <delete file="${unpack.base.dir}/${war.name}"></delete> |
在 init 段中首先删除掉上次解压的目录和目标打包目录,然后重新建立目录;在 unpack 中,首先将编译好的默认 war 包拷贝至 unpack 定义的目录,解压之后把 unpack 下的 war 包删除。下面是这时候对应的属性文件。
projectName=MTSWeb war.name=MTSWeb.war #根目录 base.dir=c:/temp #默认的war包所在的目录 dest.dir=${base.dir}/dist #解压后的目录 unpack.base.dir=${base.dir}/unpack #目标环境相对应的目录 pack.base.dir=${base.dir}/TestWebProduct |
![]() ![]() |
![]()
|
现在根据不同环境的需要,对某些配置文件的值做一些替换。在 Ant 中,提供了 filter 任务,使得替换值很方便。当然也可以使用下面介绍的正则表达式来替换属性值。filter 主要用来在同一行内容中的替换,而正则表达式一下子可以替换多行内容。filter 的使用例子:
<filter value="INFO" token=" log4j.logger"></filter> <copy todir="${dest.dir}" filtering="true"></copy> <fileset></fileset> |
这段脚本的意思就是在 src.dir 目录下的所有文件中,如果有预先定义好的"@log4j.logger@"占位符的话,在拷贝到 dest.dir 目录后,所有的占位符都被替换成了"INFO"。
你也可以将所有被替换的值放到某个属性文件中,filter 任务将属性文件中的每一个条目读出来并且设置成一个 Filter。如下所示:
<filter filtersfile="deploy_env.properties"></filter> <copy todir="${dest.dir}" filtering="true"></copy> <fileset></fileset> |
上面的脚本表示所有在 deploy_env 中出现的条目将被作为一个 filter,在拷贝到 dest.dir 目录后,所有 src.dir 目录中存在的占位符将被替换成 deploy_env 中的值。具体的例子可以参见随本文附带的 deploy.xml, deploy_env.properties 和 Test.properties。
其中 deploy.xml 是 ant 脚本,deploy_env.properties 中包含所有要替换的值,在 Test.properties 中是包含有占位符的资源文件。
![]() ![]() |
![]()
|
Ant 中支持多种正则表达式,在运行 Ant 的时候用哪种正则表达式可以通过设置 ant.regexp.regexpimpl 的值来切换,Ant 支持的的正则表达式有:
- java.util.regex package of JDK 1.4
- jakarta-regexp
- installation dependencies
正则表达式的例子:
<replaceregexp byline="true"></replaceregexp> <regexp pattern="正则表达式"></regexp> <substitution expression="将要替换的值"></substitution> <fileset includes="web.xml"></fileset> |
byline 属性用来确认被替换的时候是一次替换一行还是多行;pattern 属性用来指明正则表达式;substitution expression 中是替换的值,替换的值都定义在相对应的配置文件中;fileset 属性中的 dir 用来指定被替换文件所在的目录,includes 用来指定要替换哪个文件。需要注意的是,如果在正则表达式或者替换的值中出现"<"的话,需要用转义符"<"。
在 Eclipse3.1 中已经内置了对正则表达式的支持;但是如果你在命令行中运行需要正则表达式支持的脚本的话,则需要自己将正则表达式的包下载下来加到 classpath 中。在随文章的 deploy.xml 中提供了一个简单的替换属性文件的值的例子。正则表达式的例子可以在本文所带的 deploy.xml 中找到。
![]() ![]() |
![]()
|
在生成部署包的时候,还有可能会根据目标环境的不同,删除一些不同的文件。比如在产品环境中那些作为测试需要的代码往往需要删除,但是测试环境中并不需要。因此就需要条件表达式来做判断。如下所示:
<target name="checkTestEnv"></target> <condition property="isTestEnv"></condition> <istrue value="${deploy.isTestEnv}"></istrue> <antcall target="trueCondition"></antcall> <antcall target="falseCondition"></antcall> <target name="trueCondition" if="isTestEnv"></target> <echo message="true condition in ${projectName}"></echo> <target name="falseCondition" unless="isTestEnv"></target> <echo message="false condition in ${projectName}"></echo> |
在上面的例子中,先读出 ${deploy.isTestEnv} 的值(在配置文件 deloy.properties 中),根据读出的值对属性 isTestEnv 设值,如果 ${deploy.isTestEnv} 的值是 true,isTestEnv 的值也是 true;否则是 false。然后分别调用目标段 trueCondition 和 falseCondition。在这里,表达式值的判断是用"istrue",在 Ant 中还提供了很多别的表达式,比如 not/and/or,equals 等等,具体关于条件表达式的信息可以参考:http://ant.apache.org/manual/CoreTasks/condition.html ,该页也可以在随下载下来的文档中找到。
在段 trueCondition 中,判断 isTestEnv,如果是真的话就运行,否则不运行;在段 falseCondition 中,也判断 isTestEnv,如果是假就运行,否则不运行,在段中可以根据情况做相应的事情。条件判断式的例子可以在本文的 deploy.xml 中找到。
![]() ![]() |
![]()
|
在上面的替换过程完成后,调用 war 将 unpack 目录下的内容重新打包。
<target name="repack"></target> <war basedir="${unpack.base.dir}/${projectName}" manifest="${unpack.base.dir}/${projectName}/META-INF/MANIFEST.MF" webxml="${unpack.base.dir}/${projectName}/WEB-INF/web.xml" destfile="${pack.base.dir}/${projectName}.war"></war> |
详细的例子可以参见随本文的附件 deploy.xml 和 deploy.properties。
![]() ![]() |
![]()
|
通过本文可以看出编写好有效的 Ant 脚本能很好的解决在编译部署包的时候出现的问题,将那些变化的内容放到配置文件中,在部署的时候切换不同的配置文件就可以实现生成不同的部署包。文中也介绍了如何使用 Eclipse 来提高你编写/调试 Ant 脚本的效率。
评论
<?xml version="1.0"?> <project name="testWeb" default="all" basedir="."> <target name="all" depends="init,unpack,change-param,repack"> <echo>all in deploy.</echo> </target> <target name="init"> <echo>init in deploy</echo> <property file="deploy.properties" /> <delete dir="${unpack.base.dir}" failonerror="false" /> <delete dir="${pack.base.dir}" failonerror="false" /> <mkdir dir="${unpack.base.dir}" /> <mkdir dir="${pack.base.dir}" /> </target> <target name="unpack"> <echo>unpack the ${war.name}</echo> <copy file="${dest.dir}/${war.name}" todir="${unpack.base.dir}" /> <unzip src="${unpack.base.dir}/${war.name}" dest="${unpack.base.dir}/${projectName}" /> <delete file="${unpack.base.dir}/${war.name}" /> </target> <target name="change-param"> <echo>change params the ${war.name}</echo> <!--The example for using filter.--> <filter filtersfile="deploy_env.properties"/> <copy file="test.properties" tofile="UpdatedTest.properties" filtering="true" /> <!--The example for using regular expression.--> <!-- <echo>changing parms 'log4j.rootCategory' in ${unpack.base.dir}/${projectName}/WEB-INF/conf/logs.properties</echo> <replaceregexp byline="true"> <regexp pattern="^log4j.rootLogger=.*" /> <substitution expression="log4j.rootLogger=${deploy.log4j.rootLogger}" /> <fileset dir="${unpack.base.dir}/${projectName}/WEB-INF/conf" includes="logs.properties" /> </replaceregexp> --> <!--The example for using condition expression in Ant.--> <antcall target="checkTestEnv" /> </target> <target name="checkTestEnv"> <condition property="isTestEnv"> <istrue value="${deploy.isTestEnv}" /> </condition> <antcall target="trueCondition" /> <antcall target="falseCondition" /> </target> <target name="trueCondition" if="isTestEnv"> <echo message="true condition in ${projectName}" /> </target> <target name="falseCondition" unless="isTestEnv"> <echo message="false condition in ${projectName}" /> </target> <target name="repack"> <war destfile="${pack.base.dir}/${projectName}.war" basedir="${unpack.base.dir}/${projectName}" webxml="${unpack.base.dir}/${projectName}/WEB-INF/web.xml" manifest="${unpack.base.dir}/${projectName}/META-INF/MANIFEST.MF"> </war> </target> </project>
发表评论
-
常用破解码
2011-07-19 15:36 1247UltraEdit-32 V16.00.0.1032 注册码 ... -
网络探测工具
2010-09-28 14:48 952wireshark 还挺好用的,mark一下。。。。 ... -
Eclipse下ant编译的bug
2010-09-06 17:49 1538最近在做ant构建时经常遇到一个target执行一部分就莫名停 ... -
editplus快捷键
2010-07-14 09:55 1356From:http://hi.baidu.com/suping ... -
产品原型设计软件Axure汇总
2009-04-21 11:38 1724From: http://www.bhpub.net/to51 ... -
代理服务器软件CCPROXY
2009-04-17 16:37 1297官网:http://www.ccproxy.com/ 可以显 ... -
svn在linux下的使用(svn命令)
2009-04-17 12:32 1617From: http://hi.baidu.com/panzh ... -
svn里的branch、trunk、tag的用处
2009-01-20 10:47 1851From: http://www.svn8.com/svnjs ... -
Instant Source注册码[z]
2008-11-17 17:07 2275From: http://www.dolinker.com/b ... -
FF下插件开发
2008-11-10 10:38 1067一个不错的站点:http://blog.donews.com/ ... -
必须掌握的八个cmd命令
2008-10-02 16:30 1317From: http://topic.csdn.net/u/ ... -
我常去的一些网站
2008-06-19 17:19 11541、javaeye:http://www.iteye.com ... -
我的常用软件工具
2008-06-19 17:17 14201、HttpWatch ie插件,查看http请求的工具,查看 ... -
流行的脚本语言Python中的文本处理[z]
2008-04-13 20:43 3585From: http://linuxace.cn/progra ... -
解决MyEclipse无法自动部署的问题
2007-11-19 14:25 7681今天上午不知怎么的我的myEclipse无法自动部署了,于是g ... -
Tracert、Route 与 NBTStat的使用技巧
2007-11-08 14:43 1922... -
使用 Ant 自动生成项目构建版本【z】
2007-09-24 11:06 3120http://www.ibm.com/developerwor ...
相关推荐
在实际使用中,Eclipse允许开发者自定义工作空间,根据个人喜好配置布局和快捷键,提升开发效率。此外,Eclipse Marketplace提供了海量的插件资源,涵盖了各种编程语言、框架、工具和库,使得Eclipse几乎可以满足...
标题中的“eclipse.z0”和描述中的“eclipse.z02”似乎指的是Eclipse开发环境的分块压缩文件。在文件传输或存储时,大文件可能会被分割成多个部分,以便更方便地处理。在这种情况下,“.z0”和“.z02”是RAR或7-Zip...
3. **构建工具**:Eclipse的构建工具如Maven或Ant,可以帮助开发者自动化编译、打包和部署应用。 4. **调试器**:强大的调试器允许开发者设置断点、单步执行、查看变量值,以及进行多线程调试。 5. **插件系统**:...
内容概要:本文探讨了模糊故障树(FFTA)在工业控制系统可靠性分析中的应用,解决了传统故障树方法无法处理不确定数据的问题。文中介绍了模糊数的基本概念和实现方式,如三角模糊数和梯形模糊数,并展示了如何用Python实现模糊与门、或门运算以及系统故障率的计算。此外,还详细讲解了最小割集的查找方法、单元重要度的计算,并通过实例说明了这些方法的实际应用场景。最后,讨论了模糊运算在处理语言变量方面的优势,强调了在可靠性分析中处理模糊性和优化计算效率的重要性。 适合人群:从事工业控制系统设计、维护的技术人员,以及对模糊数学和可靠性分析感兴趣的科研人员。 使用场景及目标:适用于需要评估复杂系统可靠性的场合,特别是在面对不确定数据时,能够提供更准确的风险评估。目标是帮助工程师更好地理解和预测系统故障,从而制定有效的预防措施。 其他说明:文中提供的代码片段和方法可用于初步方案验证和技术探索,但在实际工程项目中还需进一步优化和完善。
内容概要:本文详细探讨了双馈风力发电机(DFIG)在Simulink环境下的建模方法及其在不同风速条件下的电流与电压波形特征。首先介绍了DFIG的基本原理,即定子直接接入电网,转子通过双向变流器连接电网的特点。接着阐述了Simulink模型的具体搭建步骤,包括风力机模型、传动系统模型、DFIG本体模型和变流器模型的建立。文中强调了变流器控制算法的重要性,特别是在应对风速变化时,通过实时调整转子侧的电压和电流,确保电流和电压波形的良好特性。此外,文章还讨论了模型中的关键技术和挑战,如转子电流环控制策略、低电压穿越性能、直流母线电压脉动等问题,并提供了具体的解决方案和技术细节。最终,通过对故障工况的仿真测试,验证了所建模型的有效性和优越性。 适用人群:从事风力发电研究的技术人员、高校相关专业师生、对电力电子控制系统感兴趣的工程技术人员。 使用场景及目标:适用于希望深入了解DFIG工作原理、掌握Simulink建模技能的研究人员;旨在帮助读者理解DFIG在不同风速条件下的动态响应机制,为优化风力发电系统的控制策略提供理论依据和技术支持。 其他说明:文章不仅提供了详细的理论解释,还附有大量Matlab/Simulink代码片段,便于读者进行实践操作。同时,针对一些常见问题给出了实用的调试技巧,有助于提高仿真的准确性和可靠性。
内容概要:本文详细介绍了基于西门子S7-200 PLC和组态王软件构建的八层电梯控制系统。首先阐述了系统的硬件配置,包括PLC的IO分配策略,如输入输出信号的具体分配及其重要性。接着深入探讨了梯形图编程逻辑,涵盖外呼信号处理、轿厢运动控制以及楼层判断等关键环节。随后讲解了组态王的画面设计,包括动画效果的实现方法,如楼层按钮绑定、轿厢移动动画和门开合效果等。最后分享了一些调试经验和注意事项,如模拟困人场景、防抖逻辑、接线艺术等。 适合人群:从事自动化控制领域的工程师和技术人员,尤其是对PLC编程和组态软件有一定基础的人群。 使用场景及目标:适用于需要设计和实施小型电梯控制系统的工程项目。主要目标是帮助读者掌握PLC编程技巧、组态画面设计方法以及系统联调经验,从而提高项目的成功率。 其他说明:文中提供了详细的代码片段和调试技巧,有助于读者更好地理解和应用相关知识点。此外,还强调了安全性和可靠性方面的考量,如急停按钮的正确接入和硬件互锁设计等。
内容概要:本文介绍了如何将CarSim的动力学模型与Simulink的智能算法相结合,利用模型预测控制(MPC)实现车辆的智能超车换道。主要内容包括MPC控制器的设计、路径规划算法、联合仿真的配置要点以及实际应用效果。文中提供了详细的代码片段和技术细节,如权重矩阵设置、路径跟踪目标函数、安全超车条件判断等。此外,还强调了仿真过程中需要注意的关键参数配置,如仿真步长、插值设置等,以确保系统的稳定性和准确性。 适合人群:从事自动驾驶研究的技术人员、汽车工程领域的研究人员、对联合仿真感兴趣的开发者。 使用场景及目标:适用于需要进行自动驾驶车辆行为模拟的研究机构和企业,旨在提高超车换道的安全性和效率,为自动驾驶技术研发提供理论支持和技术验证。 其他说明:随包提供的案例文件已调好所有参数,可以直接导入并运行,帮助用户快速上手。文中提到的具体参数和配置方法对于初学者非常友好,能够显著降低入门门槛。
包括:源程序工程文件、Proteus仿真工程文件、论文材料、配套技术手册等 1、采用51单片机作为主控; 2、采用AD0809(仿真0808)检测"PH、氨、亚硝酸盐、硝酸盐"模拟传感; 3、采用DS18B20检测温度; 4、采用1602液晶显示检测值; 5、检测值同时串口上传,调试助手监看; 6、亦可通过串口指令对加热器、制氧机进行控制;
内容概要:本文详细介绍了双馈永磁风电机组并网仿真模型及其短路故障分析方法。首先构建了一个9MW风电场模型,由6台1.5MW双馈风机构成,通过升压变压器连接到120kV电网。文中探讨了风速模块的设计,包括渐变风、阵风和随疾风的组合形式,并提供了相应的Python和MATLAB代码示例。接着讨论了双闭环控制策略,即功率外环和电流内环的具体实现细节,以及MPPT控制用于最大化风能捕获的方法。此外,还涉及了短路故障模块的建模,包括三相电压电流特性和离散模型与phasor模型的应用。最后,强调了永磁同步机并网模型的特点和注意事项。 适合人群:从事风电领域研究的技术人员、高校相关专业师生、对风电并网仿真感兴趣的工程技术人员。 使用场景及目标:适用于风电场并网仿真研究,帮助研究人员理解和优化风电机组在不同风速条件下的性能表现,特别是在短路故障情况下的应对措施。目标是提高风电系统的稳定性和可靠性。 其他说明:文中提供的代码片段和具体参数设置有助于读者快速上手并进行实验验证。同时提醒了一些常见的错误和需要注意的地方,如离散化步长的选择、初始位置对齐等。
适用于空手道训练和测试场景
内容概要:本文介绍了金牌音乐作词大师的角色设定、背景经历、偏好特点、创作目标、技能优势以及工作流程。金牌音乐作词大师凭借深厚的音乐文化底蕴和丰富的创作经验,能够为不同风格的音乐创作歌词,擅长将传统文化元素与现代流行文化相结合,创作出既富有情感又触动人心的歌词。在创作过程中,会严格遵守社会主义核心价值观,尊重用户需求,提供专业修改建议,确保歌词内容健康向上。; 适合人群:有歌词创作需求的音乐爱好者、歌手或音乐制作人。; 使用场景及目标:①为特定主题或情感创作歌词,如爱情、励志等;②融合传统与现代文化元素创作独特风格的歌词;③对已有歌词进行润色和优化。; 阅读建议:阅读时可以重点关注作词大师的创作偏好、技能优势以及工作流程,有助于更好地理解如何创作出高质量的歌词。同时,在提出创作需求时,尽量详细描述自己的情感背景和期望,以便获得更贴合心意的作品。
linux之用户管理教程.md
包括:源程序工程文件、Proteus仿真工程文件、配套技术手册等 1、采用51/52单片机作为主控芯片; 2、采用1602液晶显示设置及状态; 3、采用L298驱动两个电机,模拟机械臂动力、移动底盘动力; 3、首先按键配置-待搬运物块的高度和宽度(为0不能开始搬运); 4、按下启动键开始搬运,搬运流程如下: 机械臂先把物块抓取到机器车上, 机械臂减速 机器车带着物块前往目的地 机器车减速 机械臂把物块放下来 机械臂减速 机器车回到物块堆积处(此时机器车是空车) 机器车减速 蜂鸣器提醒 按下复位键,结束本次搬运
内容概要:本文详细介绍了基于下垂控制的三相逆变器电压电流双闭环控制的仿真方法及其在MATLAB/Simulink和PLECS中的具体实现。首先解释了下垂控制的基本原理,即有功调频和无功调压,并给出了相应的数学表达式。随后讨论了电压环和电流环的设计与参数整定,强调了两者带宽的差异以及PI控制器的参数选择。文中还提到了一些常见的调试技巧,如锁相环的响应速度、LC滤波器的谐振点处理、死区时间设置等。此外,作者分享了一些实用的经验,如避免过度滤波、合理设置采样周期和下垂系数等。最后,通过突加负载测试展示了系统的动态响应性能。 适合人群:从事电力电子、微电网研究的技术人员,尤其是有一定MATLAB/Simulink和PLECS使用经验的研发人员。 使用场景及目标:适用于希望深入了解三相逆变器下垂控制机制的研究人员和技术人员,旨在帮助他们掌握电压电流双闭环控制的具体实现方法,提高仿真的准确性和效率。 其他说明:本文不仅提供了详细的理论讲解,还结合了大量的实战经验和调试技巧,有助于读者更好地理解和应用相关技术。
内容概要:本文详细介绍了光伏并网逆变器的全栈开发资料,涵盖了从硬件设计到控制算法的各个方面。首先,文章深入探讨了功率接口板的设计,包括IGBT缓冲电路、PCB布局以及EMI滤波器的具体参数和设计思路。接着,重点讲解了主控DSP板的核心控制算法,如MPPT算法的实现及其注意事项。此外,还详细描述了驱动扩展板的门极驱动电路设计,特别是光耦隔离和驱动电阻的选择。同时,文章提供了并联仿真的具体实现方法,展示了环流抑制策略的效果。最后,分享了许多宝贵的实战经验和调试技巧,如主变压器绕制、PWM输出滤波、电流探头使用等。 适合人群:从事电力电子、光伏系统设计的研发工程师和技术爱好者。 使用场景及目标:①帮助工程师理解和掌握光伏并网逆变器的硬件设计和控制算法;②提供详细的实战经验和调试技巧,提升产品的可靠性和性能;③适用于希望深入了解光伏并网逆变器全栈开发的技术人员。 其他说明:文中不仅提供了具体的电路设计和代码实现,还分享了许多宝贵的实际操作经验和常见问题的解决方案,有助于提高开发效率和产品质量。
内容概要:本文详细介绍了粒子群优化(PSO)算法与3-5-3多项式相结合的方法,在机器人轨迹规划中的应用。首先解释了粒子群算法的基本原理及其在优化轨迹参数方面的作用,随后阐述了3-5-3多项式的数学模型,特别是如何利用不同阶次的多项式确保轨迹的平滑过渡并满足边界条件。文中还提供了具体的Python代码实现,展示了如何通过粒子群算法优化时间分配,使3-5-3多项式生成的轨迹达到时间最优。此外,作者分享了一些实践经验,如加入惩罚项以避免超速,以及使用随机扰动帮助粒子跳出局部最优。 适合人群:对机器人运动规划感兴趣的科研人员、工程师和技术爱好者,尤其是有一定编程基础并对优化算法有初步了解的人士。 使用场景及目标:适用于需要精确控制机器人运动的应用场合,如工业自动化生产线、无人机导航等。主要目标是在保证轨迹平滑的前提下,尽可能缩短运动时间,提高工作效率。 其他说明:文中不仅给出了理论讲解,还有详细的代码示例和调试技巧,便于读者理解和实践。同时强调了实际应用中需要注意的问题,如系统的建模精度和安全性考量。
KUKA机器人相关资料
内容概要:本文详细探讨了光子晶体中的束缚态在连续谱中(BIC)及其与轨道角动量(OAM)激发的关系。首先介绍了光子晶体的基本概念和BIC的独特性质,随后展示了如何通过Python代码模拟二维光子晶体中的BIC,并解释了BIC在光学器件中的潜在应用。接着讨论了OAM激发与BIC之间的联系,特别是BIC如何增强OAM激发效率。文中还提供了使用有限差分时域(FDTD)方法计算OAM的具体步骤,并介绍了计算本征态和三维Q值的方法。此外,作者分享了一些实验中的有趣发现,如特定条件下BIC表现出OAM特征,以及不同参数设置对Q值的影响。 适合人群:对光子晶体、BIC和OAM感兴趣的科研人员和技术爱好者,尤其是从事微纳光子学研究的专业人士。 使用场景及目标:适用于希望通过代码模拟深入了解光子晶体中BIC和OAM激发机制的研究人员。目标是掌握BIC和OAM的基础理论,学会使用Python和其他工具进行模拟,并理解这些现象在实际应用中的潜力。 其他说明:文章不仅提供了详细的代码示例,还分享了许多实验心得和技巧,帮助读者避免常见错误,提高模拟精度。同时,强调了物理离散化方式对数值计算结果的重要影响。
内容概要:本文详细介绍了如何使用C#和Halcon 17.12构建一个功能全面的工业视觉项目。主要内容涵盖项目配置、Halcon脚本的选择与修改、相机调试、模板匹配、生产履历管理、历史图像保存以及与三菱FX5U PLC的以太网通讯。文中不仅提供了具体的代码示例,还讨论了实际项目中常见的挑战及其解决方案,如环境配置、相机控制、模板匹配参数调整、PLC通讯细节、生产数据管理和图像存储策略等。 适合人群:从事工业视觉领域的开发者和技术人员,尤其是那些希望深入了解C#与Halcon结合使用的专业人士。 使用场景及目标:适用于需要开发复杂视觉检测系统的工业应用场景,旨在提高检测精度、自动化程度和数据管理效率。具体目标包括但不限于:实现高效的视觉处理流程、确保相机与PLC的无缝协作、优化模板匹配算法、有效管理生产和检测数据。 其他说明:文中强调了框架整合的重要性,并提供了一些实用的技术提示,如避免不同版本之间的兼容性问题、处理实时图像流的最佳实践、确保线程安全的操作等。此外,还提到了一些常见错误及其规避方法,帮助开发者少走弯路。
内容概要:本文探讨了分布式电源(DG)接入对9节点配电网节点电压的影响。首先介绍了9节点配电网模型的搭建方法,包括定义节点和线路参数。然后,通过在特定节点接入分布式电源,利用Matlab进行潮流计算,模拟DG对接入点及其周围节点电压的影响。最后,通过绘制电压波形图,直观展示了不同DG容量和接入位置对配电网电压分布的具体影响。此外,还讨论了电压越限问题以及不同线路参数对电压波动的影响。 适合人群:电力系统研究人员、电气工程学生、从事智能电网和分布式能源研究的专业人士。 使用场景及目标:适用于研究分布式电源接入对配电网电压稳定性的影响,帮助优化分布式电源的规划和配置,确保电网安全稳定运行。 其他说明:文中提供的Matlab代码和图表有助于理解和验证理论分析,同时也为后续深入研究提供了有价值的参考资料。