从Java运行时,Ant无法找到XPathExpressionException,但在构建Android应用程序时在命令行上找不到

时间:2013-01-31 14:05:30

标签: java android ant glassfish application-server

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

当我从命令行运行ant debugant 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行是:<taskdef resource="anttasks.properties" classpathref="android.antlibs" />

这是指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>

我的ant.properties文件为空,local.properties文件正确指向SDK,而project.properties文件中唯一的内容是:target=android-10

Java代码

我用来尝试运行Ant的Java代码都在一个类中,看起来像这样(缩短了节省空间):

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

setupSDK(dir)使用JVM标志或环境变量ANDROID_HOME(并且正常工作)动态创建local.properties文件。

就是这样

这是我相信的所有相关内容。我在一台配备64位JDK的全新Windows 8机器上运行它,但在运行32位JVM的Windows 7机器上运行时遇到同样的问题。

正如我上面所说,当我在命令行上运行ant releaseant debug时,它会起作用,所以我不知道为什么它不能用Java工作。

更新

经过一些测试后,似乎它实际上可以在Java上运行,而不是在GlassFish服务器上运行。有人有主意吗?

谢谢,林登

另一次更新

我的一位同事建议它可能与范围有关,而且我试图在GlassFish域之外加载类似乎可能是原因。

更新

虽然我不完全确定如何解决它,但似乎确实如此。 我刚刚发现,当在Glassfish外部运行时,给出的类路径Ant很长,包括所有的glassfish模块(我认为)以及来自我的JDK(包括rt.jar)的正确运行时。

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

0 个答案:

没有答案