我试图找出使用 Ant 预编译将部署到 Oracle 应用程序服务器的 JSP 的最佳方法。即使我正在部署到 Oracle 应用服务器,我也想避免使用 Oracle 版本的 Ant。
2 回答
在 ORACLE_HOME/j2ee/home/jsp/bin/ojspc 的 oc4j 安装中可以使用 Oracle 的 JSP 编译器
假设您的类路径在您将运行的 compand 行中是正确的:
ojspc your.war
战争将得到更新,并在包含预编译 JSP 的 WEB-INF/lib 中放置一个 jar。请注意,如果您预编译 JSP,您还应该将 MAIN_MODE 设置为“JUSTRUN”,以获得预编译 JSP 的额外性能优势。JUSTRUN 设置正如它所暗示的那样,OC4J 容器将不再检查更新的 .jsp 文件。
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>oracle.jsp.runtimev2.JspServlet</servlet-class>
<init-param>
<param-name>main_mode</param-name>
<param-value>justrun</param-value>
</init-param>
</servlet>
一旦您对从命令行调用 ojspc 感到满意,您就可以开始使用 Oracle 提供的 ANT 任务了。
ANT内
<oracle:compileJsp file="dist/war/before-${app}war"
verbose="false"
output="dist/war/${app}.war" />
您的项目标签应引用 oracle 任务:
<project name="your-name" default="compile" basedir="." xmlns:oracle="antlib:oracle">
...
</project>
更新 02.22.2011 您也可以直接使用 ojspc jar 并避免尝试配置 oracle:compileJsp 任务,下面的代码需要一个 war 文件并在其中预编译 JSPS。
<!-- Now Precompile the War File (see entry in <project> tag ) -->
<java jar="${env.ORACLE_HOME}/j2ee/home/ojspc.jar" classpathref="jspPreCompileClassPath" fork="true">
<arg value="-addClasspath"/>
<arg pathref="classpath"/>
<arg line="'${dist}/war/a-war-file.war'"/>
</java>
jspPreCompileClassPath 定义如下所示:
<path id="jspPreCompileClassPath">
<path location="${env.ORACLE_HOME}/j2ee/home/lib/pcl.jar"/>
<path location="${env.ORACLE_HOME}/j2ee/home/lib/ojsp.jar"/>
<path location="${env.ORACLE_HOME}/j2ee/home/lib/oc4j-internal.jar"/>
<path location="${env.ORACLE_HOME}/j2ee/home/lib/servlet.jar"/>
<path location="${env.ORACLE_HOME}/j2ee/home/lib/commons-el.jar"/>
<path location="${env.ORACLE_HOME}/j2ee/home/lib/bcel.jar"/>
<path location="${env.ORACLE_HOME}/lib/xmlparserv2.jar"/>
<path location="${env.ORACLE_HOME}/j2ee/home/lib/oc4j-schemas.jar"/>
<path location="${env.ORACLE_HOME}/j2ee/home/jsp/lib/taglib/ojsputil.jar"/>
</path>
我不确定您所说的 Oracle 版本的 Ant 是什么意思,但据我了解,您将需要 oracle 的 ant 任务来完成这项工作。这个页面解释了如何做到这一点。您将使用从 apache 网站下载的 apache ant,但您需要使用 Oracle 的 Oracle ant 任务库来为 Oracle 预编译 JSP。