蚂蚁罐头';从Java运行时找不到XPathExpressionException,但在构建Android应用程序时在命令行上找到

蚂蚁罐头';从Java运行时找不到XPathExpressionException,但在构建Android应用程序时在命令行上找到,java,android,ant,glassfish,application-server,Java,Android,Ant,Glassfish,Application Server,目前,我正在尝试在GlassFish服务器上使用Ant构建一个android应用程序 当我从命令行运行ant debug或ant release时,我当前的build.xml将构建得很好,但是当我尝试通过Java构建它时,它抛出一个异常并告诉我它找不到类:javax/xml/xpath/XPathExpressionException 错误消息的相关部分是: C:\androidsdk\adt-bundle-windows-x86_64\sdk\tools\ant\build.xml:109:

目前,我正在尝试在GlassFish服务器上使用Ant构建一个android应用程序

当我从命令行运行
ant debug
ant release
时,我当前的build.xml将构建得很好,但是当我尝试通过Java构建它时,它抛出一个异常并告诉我它找不到类:javax/xml/xpath/XPathExpressionException

错误消息的相关部分是:

C:\androidsdk\adt-bundle-windows-x86_64\sdk\tools\ant\build.xml:109: taskdef A class needed by class com.android.ant.GetTypeTask cannot be found: javax/xml/xpath/XPathExpressionException
using the classloader AntClassLoader[C:\androidsdk\adt-bundle-windows-x86_64\sdk\tools\lib\anttasks.jar;C:\androidsdk\adt-bundle-windows-x86_64\sdk\tools\lib\common.jar;C:\androidsdk\adt-bundle-windows-x86_64\sdk\tools\lib\guava-tools.jar;C:\androidsdk\adt-bundle-windows-x86_64\sdk\tools\lib\sdklib.jar;C:\androidsdk\adt-bundle-windows-x86_64\sdk\tools\lib\layoutlib_api.jar;C:\androidsdk\adt-bundle-windows-x86_64\sdk\tools\lib\commons-compress-1.0.jar;C:\androidsdk\adt-bundle-windows-x86_64\sdk\tools\lib\httpclient-4.1.1.jar;C:\androidsdk\adt-bundle-windows-x86_64\sdk\tools\lib\httpcore-4.1.jar;C:\androidsdk\adt-bundle-windows-x86_64\sdk\tools\lib\httpmime-4.1.1.jar;C:\androidsdk\adt-bundle-windows-x86_64\sdk\tools\lib\commons-logging-1.1.1.jar;C:\androidsdk\adt-bundle-windows-x86_64\sdk\tools\lib\commons-codec-1.4.jar;C:\androidsdk\adt-bundle-windows-x86_64\sdk\tools\lib\dvlib.jar;C:\androidsdk\adt-bundle-windows-x86_64\sdk\tools\lib\manifmerger.jar]
android build.xml的第109行是:

它引用了anttasks.jar中的一个文件,其中包含一个xpath条目

生成文件 应用程序的生成文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<project name="2007_doc2" default="help">
    <property file="local.properties"/>
    <property file="ant.properties"/>
    <property environment="env"/>
    <condition property="sdk.dir" value="${env.ANDROID_HOME}">
        <isset property="env.ANDROID_HOME"/>
    </condition>
    <loadproperties srcFile="project.properties"/>
    <!-- quick check on sdk.dir -->
    <fail
        message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."
        unless="sdk.dir"
        />
<import file="custom_rules.xml" optional="true"/>
<import file="${sdk.dir}/tools/ant/build.xml"/>
</project>
setupSDK(dir)
使用JVM标志或环境变量ANDROID_HOME动态创建local.properties文件(并正常工作)

就这样 我相信这些都是相关的东西。我在一台全新的64位JDK Windows8机器上运行这个程序,但在运行32位JVM的Windows7机器上运行时,它也有同样的问题

正如我上面所说,当我在命令行上运行
antrelease
antdebug
时,它就可以工作了,所以我不知道为什么它不能从Java工作

更新 经过一些测试后,它似乎可以在Java上运行,而不是在GlassFish服务器上运行。有人有什么想法吗

谢谢,林登

另一个更新 我的一位同事建议这可能与作用域有关,而我正试图在GlassFish域之外加载类,这似乎就是原因

更新 这似乎是事实,尽管我不完全确定如何解决它。 我刚刚发现,在Glassfish之外运行时,给出的类路径Ant非常长,包括所有Glassfish模块(我认为)以及来自JDK的正确运行时(包括rt.jar)


而在glassfish上运行时,java类路径上唯一的东西是:C:\Program Files\glassfish-3.1.2.2\glassfish\modules\glassfish.jar

如果不清楚我在尝试做什么:我有一个应用程序,它根据一些用户输入为android应用程序创建源代码,然后我想建立apk文件,并将其返回给用户下载。如果有人可以帮助,仍然需要帮助。我在另一个非android的构建文件上进行了测试,该文件运行成功,因此我需要知道如何配置/放置android SDK,以便成功加载类。我改变了调用ant的方式,以便将相关库构建到我正在使用的jar中,并且功能就在那里。在GlassFish上运行时,这仍然会导致相同的问题。然而,如果我将我的应用服务器更改为Tomcat,它似乎可以正常工作,这是非常奇怪的。
setupSDK(dir);
Project project = new Project();

project.setUserProperty("ant.file", buildFile.getAbsolutePath());
project.setBaseDir(dir);

DefaultLogger consoleLogger = new DefaultLogger();
consoleLogger.setErrorPrintStream(System.err);
consoleLogger.setOutputPrintStream(System.out);
consoleLogger.setMessageOutputLevel(Project.MSG_INFO);
project.addBuildListener(consoleLogger);
project.init();               

ProjectHelper helper = ProjectHelper.getProjectHelper();
project.addReference("ant.projectHelper", helper);
helper.parse(project, buildFile);

project.executeTarget(project.getDefaultTarget()); // build