我已经将我的J2EE web应用程序从jdk6、tomcat6升级到了jdk7和tomcat7但在部署teamcity时出现以下错误。
[xmltask]java.lang.NoClassDefFoundError:org/apache/xpath/XPathAPI
java.lang.NoClassDefFoundError: org/apache/xpath/XPathAPI
at com.oopsconsultancy.xmltask.jdk14.XPathAnalyser14.analyse(XPathAnalyser14.java:29)
at com.oopsconsultancy.xmltask.XmlReplace.apply(XmlReplace.java:72)
at com.oopsconsultancy.xmltask.XmlReplacement.apply(XmlReplacement.java:61)
at com.oopsconsultancy.xmltask.ant.XmlTask.processDoc(XmlTask.java:707)
at com.oopsconsultancy.xmltask.ant.XmlTask.execute(XmlTask.java:676)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
at org.apache.tools.ant.Task.perform(Task.java:364)
at org.apache.tools.ant.Target.execute(Target.java:341)
at org.apache.tools.ant.Target.performTasks(Target.java:369)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)
at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:37)
at org.apache.tools.ant.Project.executeTargets(Project.java:1068)
at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:382)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
at org.apache.tools.ant.Task.perform(Task.java:364)
at org.apache.tools.ant.Target.execute(Target.java:341)
at org.apache.tools.ant.Target.performTasks(Target.java:369)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)
at org.apache.tools.ant.Project.executeTarget(Project.java:1185)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40)
at org.apache.tools.ant.Project.executeTargets(Project.java:1068)
at org.apache.tools.ant.Main.runBuild(Main.java:668)
at org.apache.tools.ant.Main.startAnt(Main.java:187)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:246)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:67)
Caused by: java.lang.ClassNotFoundException: org.apache.xpath.XPathAPI
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 25 more
缺少的类包含在xalan-2.7.0中(请参阅Maven central(。所以我认为问题在于类路径是如何设置的。
考虑到这似乎是xmltask任务报告的错误,这是否意味着错误是由ANT抛出的?
谷歌发现了以下例子,这可能是你的问题的答案:
- https://wiki.nci.nih.gov/display/NBIA/Migration+到+Java+7
将xalan-jar添加到taskdef:的类路径中
<taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask">
<classpath>
<pathelement path="${common.lib.dir}/xmltask-1.15.1.jar" />
<pathelement path="${common.lib.dir}/xalan-2.7.1.jar"/>
</classpath>
</taskdef>
如果使用maven,请将其添加到依赖项部分:
<dependency>
<groupId>xalan</groupId>
<artifactId>xalan</artifactId>
<version>2.7.0</version>
</dependency>
我不确定,但我猜名为xalan-2.4.0.jar的jar不见了请下载并放在里面。
http://www.java2s.com/Code/Jar/x/Downloadxalan240jar.htm
将xpath添加到类路径中,然后重试部署。如果您不确定您需要在tomcat库文件夹中搜索哪个xpath jar来查找xpathapi jar
Xpathapi是一个jar,用于评估java中的xpath(与xml相关(。如果您不确定需要哪个版本,请在谷歌上搜索并获取最新的xpathapijar。
现在我只删除从我的build.xml,它正在工作。我知道这不是一个解决方案,但我们必须交付。
在Build.xml中,将java版本更改为1.7,将类路径XMLTask从1.15.1更改为1.16.1。它可以使用
您应该删除import org.apache.xpath.operations.String;
。
这就是我解决这个问题的方法,包括Xalan和Serializer
-
下载xalan-j2-2.7.0.jar&serializer-2.7.0.jar
-
更新build.xml以在路径中包含这些jar
<taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"> <classpath> <pathelement location="../xmltask-v1.14.jar"/> <pathelement path="../xalan-j2-2.7.0.jar"/> <pathelement path="../serializer-2.7.0.jar"/> </classpath> </taskdef>
这应该能让它运转起来。