最近做的一个项目,要求在客户电脑上未安装jdk,tomcat,ant等程序,没有环境变量支持来运行项目。那就考虑将这些软件使用免安装版和项目一起打包,客户可能不懂设置环境变量,那就将环境变量提前在这些软件中设置好,具体步骤:
1、在tomcat的根目录下建立一个叫做JDK的文件夹,将免安装的jdk放在该文件夹下(我使用的是1.8免安装,jdk和jre合二为一的版本),然后在tomcat的bin下的startup.bat中设置JAVA_HOME,具体位置:
如此,实际就是给环境变量中增加了jdk,可以在cmd命令下进行验证。
注意:jdk必须放在tomcat下,如图:
因为我的项目运行是调用了一个exe程序来执行ant命令(即执行的一个build.xml),那我就可以在这个exe程序中继续去添加环境变量中的jdk,ant。具体:SET PATH=%PATH%;%cd%\Project\ant\bin;%cd%\Project\tomcat\JDK\bin;在此处,%cd%是这个exe的当前路径,可以明显看出来,在这个exe的同级有一个Project的文件夹,然后将免安装的ant和jdk放在Project下。在exe中再cd到build.xml的路径,执行ant命令即可。
build.xml的配置,需要改动的地方也不多,如下:
<?xml version="1.0" encoding="UTF-8"?>
<project default="localDeployWar" basedir="F:\TestPDMDemo0115">
<echo message="pulling in property files" />
<property file="build.properties" />
<!-- 定义项目名称 -->
<property name="project.name" value="TestPDMDemo0115" />
<!-- 定义jar包名称 -->
<property name="jar.name" value="com.jar" />
<!-- 定义war名称 -->
<property name="war.name" value="${project.name}" />
<!-- 定义local web 容器的部署路径 -->
<property name="localWebServer.home" value="D:\JavaAbout\Tomcat\apache-tomcat-7.0.78" />
<property name="log.file" value="${localWebServer.home}/webapps/log.info"/>
<!-- 源代码路径 -->
<property name="src.dir" value="src" />
<!-- 编译的目标路径 -->
<property name="dist.dir" value="./CompileClassAndWar" />
<property name="dist.classes.dir" value="${dist.dir}/classes" />
<property name="dist.jar.dir" value="${dist.dir}/jar" />
<property name="dist.war.dir" value="${dist.dir}/war" />
<!-- WebContent 结构下的几个路径 -->
<property name="webcontent.dir" value="./WebRoot" />
<property name="webcontent.webinf.dir" value="${webcontent.dir}/WEB-INF" />
<!-- 定义 classpath 路径,抽象定义,可以多处引用 -->
<path id="classpath">
<!-- 项目的jar包-->
<fileset dir="${webcontent.webinf.dir}/lib">
<include name="**/*.jar" />
</fileset>
<!-- 项目的classes文件-->
<pathelement location="${webcontent.webinf.dir}/classes " />
</path>
<!-- 初始化删除、创建 classes 路径 -->
<target name="init">
<echo message=" ====== 初始化创建build.dir编译目录 ======" />
<delete dir="${dist.dir}" />
<mkdir dir="${dist.dir}" />
<mkdir dir="${dist.jar.dir}" />
<mkdir dir="${dist.war.dir}" />
<touch file="${log.file}" />
<echo message=" ====== 初始化WebContent.classes创建编译目录 ======" />
<!-- WebContent 下的 classes -->
<mkdir dir="${dist.classes.dir}" />
</target>
<!-- 编译 java 文件,编译到 dist.classes 下-->
<target name="compile" depends="init">
<echo message=" ====== 编译源代码 复制到 dist.classes 目录 ======" />
<javac encoding="utf-8" srcdir="${src.dir}" destdir="${dist.classes.dir}" debug="on" deprecation="false" optimize="true" includeAntRuntime="false" failonerror="true" source="1.6" target="1.6">
<classpath refid="classpath" />
</javac>
<echo message=" ====== 将重新编译的classes文件复制到classes目录下 ======" />
<copy todir="${webcontent.webinf.dir}/classes">
<fileset dir="${dist.classes.dir}">
<exclude name="**/*Test*.*" />
</fileset>
</copy>
<echo message=" ====== 将hibernate.cfg.xml复制到classes目录下 ======" />
<copy file="${src.dir}/hibernate.cfg.xml" todir="${webcontent.webinf.dir}/classes">
</copy>
</target>
<target name="test" depends="compile" description="Junit 测试,暂无">
<echo message=" ====== Junit 测试,暂无 ======" />
</target>
<target name="war" depends="test" description="将工程打成 war 包">
<echo message=" ====== 打 war 包 ======" />
<delete file="${dist.war.dir}/${war.name}.war" />
<war warfile="${dist.war.dir}/${war.name}.war" webxml="${webcontent.webinf.dir}/web.xml">
<fileset dir="${webcontent.dir}" >
</fileset>
</war>
</target>
<target name="localDeploy" depends="test" description="将工程直接部署到webapps">
<echo message="将工程不打包直接部署到本地tomcat的Webapps" />
<delete file="${localWebServer.home}/webapps/${war.name}.war" />
<delete dir="${localWebServer.home}/webapps/${project.name}" />
<mkdir dir="${localWebServer.home}/webapps/${project.name}" />
<copy todir="${localWebServer.home}/webapps/${project.name}" overwrite="true">
<fileset dir="${webcontent.dir}" />
</copy>
</target>
<target name="localDeployWar" depends="war" description="将war包部署server中">
<echo message="将war包部署local server中" />
<delete file="${localWebServer.home}/webapps/${war.name}.war" />
<delete dir="${localWebServer.home}/webapps/${project.name}" />
<copy todir="${localWebServer.home}/webapps" overwrite="true">
<fileset file="${dist.war.dir}/${war.name}.war" />
</copy>
<exec executable="cmd" dir="${localWebServer.home}/bin" failonerror="false"
output="${log.file}" append="true" >
<!-- <arg value="/c" /> -->
<env key="CATALINA_HOME" path="${localWebServer.home}"/>
<arg value="/c startup.bat" />
</exec>
</target>
</project>