我有运行在ant1.6和java1.4上的遗留代码,现在我正在升级到ant1.10.8和java8。它使用xslt来转换文件。但是,当我使用升级版本运行deploy应用程序时,部署失败,因为它无法加载classpath中存在的类。下面是蚂蚁的目标
<target name="generate">
<property file="/etc/adminkey"/>
<xslt processor="trax" force="true" in="prop.xml" style="xslt/prop.xslt" out="logger.properties">
<param name="envname" expression="${env.ENV_NAME}"/>
<param name="packagename" expression="logger"/>
<param name="rootdir" expression="${env.ROOT_DIR}"/>
<classpath>
<pathelement location="/bin/util.jar"/>
</classpath>
</xslt>
</target>
我使用的是util.jar中的一个类
我怀疑类路径被忽略了。但不知道为什么。
下面是stacktrace。
generate:
INFO - [echo] Generating logger.properties file...
INFO - [xslt] Processing prop.xml to logger.properties
INFO - [xslt] Loading stylesheet xslt/prop.xslt
INFO - [xslt] : Error! Cannot find class 'com.group.tools.util.Encrypter'.
INFO - [xslt] : Error! Cannot find external method 'com.group.tools.util.Encrypter.decryptwithkey' (must be public).
INFO - [xslt] : Fatal Error! Cannot find external method 'com.group.tools.util.Encrypter.decryptwithkey' (must be public).
INFO - [xslt] Failed to process prop.xml
ERROR -
ERROR - BUILD FAILED
ERROR - prop.xml:10: Fatal error during transformation using xslt/props.xslt: Cannot find external method 'com.group.tools.util.Encrypter.decryptwithkey' (must be public).
ERROR -
ERROR - Total time: 2 seconds
2条答案
按热度按时间efzxgjgh1#
我能够找出问题所在,这是因为xslt中jar的路径是错误的,它使用的是旧版本,因为jar在ant lib目录中可用。
m3eecexj2#
对于最新版本的ant和jdk,出于安全原因,默认情况下禁止加载扩展函数。看到了吗https://ant.apache.org/manual/tasks/style.html “有关xslt扩展函数的说明”一节。