【发布时间】:2013-06-18 07:57:22
【问题描述】:
如何使用 Java 以编程方式为 Apache Tomcat 服务器创建可部署的 WAR 文件?
是否有此类任务的库?
我正在开发一个用于特殊目的的小型 IDE。 IDE 是用 Java 和 JavaScript 编写的,所以我需要使用它们创建 WAR 文件。
【问题讨论】:
-
不要使用 Ant 而是使用 maven。在我看来,它更强大,也更容易使用。
如何使用 Java 以编程方式为 Apache Tomcat 服务器创建可部署的 WAR 文件?
是否有此类任务的库?
我正在开发一个用于特殊目的的小型 IDE。 IDE 是用 Java 和 JavaScript 编写的,所以我需要使用它们创建 WAR 文件。
【问题讨论】:
如果您想从代码构建它,请尝试从命令行使用
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("jar cvf /path/to/your/project/your-file.war");
当然,同样的事情也可以使用 ANT 或 Maven(只要这些工具安装在最终平台上)。
编辑:添加改进建议
【讨论】:
Runtime.getRuntime().exec()命令,还是有更好的办法?
我不知道库,但 WAR 文件只是一个具有不同结尾的 ZIP 文件。
只需创建内部文件夹结构和文件(谷歌搜索java代码)并打包为zip(我认为java也有方法,再次谷歌)并将文件从“myfile.zip”重命名为“myfile.zip”。战争”
【讨论】:
我不知道您将如何使用您拥有的 IDE 来做到这一点。但是 WAR 文件具有以下结构:
因此,如果您想手动构建 WAR,则需要在扩展名为 .war 的 zip 文件中创建该文件结构,并且需要将其复制到服务器的正确位置以进行部署。大多数服务器还允许“爆炸部署”,这意味着您不需要实际的战争文件,您只需将这些内容部署到与您的战争同名的目录(即“myapp.war”)。
【讨论】:
您可以通过多种方式执行此操作,例如,如果您使用的是 maven,则只需使用 <packaging>war</packaging>
如前所述,您可以只导出战争,但这并不完全是“程序化的”。
如果您使用的是 Ant - 您可以找到此 here 的教程
【讨论】:
<?xml version="1.0" ?>
<path id="compile.classpath">
<fileset dir="WebContent/WEB-INF/lib">
<include name="*.jar"/>
</fileset>
</path>
<target name="init">
<mkdir dir="build/classes"/>
<mkdir dir="dist" />
</target>
<target name="compile" depends="init" >
<javac destdir="build/classes" debug="true" srcdir="src">
<classpath refid="compile.classpath"/>
</javac>
</target>
<target name="war" depends="compile">
<war destfile="/APP/jboss-5.1.0.GA/server/all/deploy/DispatchActionEx.war" webxml="WebContent/WEB-INF/web.xml">
<fileset dir="WebContent"/>
<lib dir="WebContent/WEB-INF/lib"/>
<classes dir="build/classes"/>
</war>
</target>
<target name="clean">
</target>
【讨论】:
own IDE 创建一个WAR 文件programmatically in Java。因此,使用第 3 方 IDE 根本不是解决方案。