Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过Ant编译jsoup?_Java_Ant_Build_Compilation_Jsoup - Fatal编程技术网

Java 如何通过Ant编译jsoup?

Java 如何通过Ant编译jsoup?,java,ant,build,compilation,jsoup,Java,Ant,Build,Compilation,Jsoup,我尝试使用Ant编译jsoup源代码。我可以成功编译,但无法通过测试。过程如下: jsoup版本:1.6.3;Ant版本:1.8.2 jsoup的源在目录中 src/ 我制作了一个构建文件 src/build.xml 此文件包含 <project name="jsoup"> <target name="compile"> <mkdir dir="build/classes"/> <javac srcdir="src" destdir=

我尝试使用Ant编译jsoup源代码。我可以成功编译,但无法通过测试。过程如下:

jsoup版本:1.6.3;Ant版本:1.8.2

jsoup的源在目录中

src/
我制作了一个构建文件

src/build.xml
此文件包含

<project name="jsoup">
<target name="compile">
    <mkdir dir="build/classes"/>
    <javac srcdir="src" destdir="build/classes" includeantruntime="false"/>
</target>

<target name="jar">
    <mkdir dir="build/jar"/>
    <jar destfile="build/jar/jsoup.jar" basedir="build/classes">
        <manifest>
            <attribute name="Main-Class" value="StateTrace"/>
        </manifest>
    </jar>
</target>

<target name="run">
    <!--<java jar="build/jar/jsoup.jar" input="htmls/index.html" fork="true"/>-->
    <exec executable="java">
        <arg value="-jar"/>
        <arg value="build/jar/jsoup.jar"/>
        <arg value="htmls/index.html"/>
    </exec>
</target>
</project>
然后我用Ant编译并运行它:

> ant compile
> ant jar
> ant run
在这之后,我犯了这样的错误:

run:
 [exec] Exception in thread "main" java.lang.ExceptionInInitializerError
 [exec]     at org.jsoup.nodes.Entities$EscapeMode.<clinit>(Unknown Source)
 [exec]     at org.jsoup.nodes.Document$OutputSettings.<init>(Unknown Source)
 [exec]     at org.jsoup.nodes.Document.<init>(Unknown Source)
 [exec]     at org.jsoup.parser.TreeBuilder.initialiseParse(Unknown Source)
 [exec]     at org.jsoup.parser.TreeBuilder.parse(Unknown Source)
 [exec]     at org.jsoup.parser.HtmlTreeBuilder.parse(Unknown Source)
 [exec]     at org.jsoup.parser.Parser.parse(Unknown Source)
 [exec]     at org.jsoup.Jsoup.parse(Unknown Source)
 [exec]     at StateTrace.main(Unknown Source)
 [exec] Caused by: java.lang.NullPointerException
 [exec]     at java.util.Properties$LineReader.readLine(Properties.java:418)
 [exec]     at java.util.Properties.load0(Properties.java:337)
 [exec]     at java.util.Properties.load(Properties.java:325)
 [exec]     at org.jsoup.nodes.Entities.loadEntities(Unknown Source)
 [exec]     at org.jsoup.nodes.Entities.<clinit>(Unknown Source)
 [exec]     ... 9 more
 [exec] Result: 1

BUILD SUCCESSFUL
Total time: 0 seconds
我可以成功编译并通过测试


有线索吗?谢谢

此build.xml与ant 1.8.2配合使用:

<?xml version="1.0"?>
<project name="jsoup">
    <target name="compile">
        <mkdir dir="build/classes"/>
        <javac srcdir="src" destdir="build/classes" includeantruntime="false"/>
    </target>

    <target name="jar">
        <mkdir dir="build/jar"/>
        <jar destfile="build/jar/jsoup.jar" basedir="build/classes">
            <manifest>
                <attribute name="Main-Class" value="org.jsoup.examples.HtmlToPlainText"/>
            </manifest>
        </jar>
    </target>

    <target name="run">
        <!--<java jar="build/jar/jsoup.jar" input="htmls/index.html" fork="true"/>-->
        <exec executable="java">
            <arg value="-jar"/>
            <arg value="build/jar/jsoup.jar"/>
            <arg value="htmls/index.html"/>
        </exec>
    </target>
</project>
。。。等待更多信息。。。
... 在它出现之前,我的猜测是,在htmls/index.html中没有文件

This build.xml适用于ant 1.8.2:

<?xml version="1.0"?>
<project name="jsoup">
    <target name="compile">
        <mkdir dir="build/classes"/>
        <javac srcdir="src" destdir="build/classes" includeantruntime="false"/>
    </target>

    <target name="jar">
        <mkdir dir="build/jar"/>
        <jar destfile="build/jar/jsoup.jar" basedir="build/classes">
            <manifest>
                <attribute name="Main-Class" value="org.jsoup.examples.HtmlToPlainText"/>
            </manifest>
        </jar>
    </target>

    <target name="run">
        <!--<java jar="build/jar/jsoup.jar" input="htmls/index.html" fork="true"/>-->
        <exec executable="java">
            <arg value="-jar"/>
            <arg value="build/jar/jsoup.jar"/>
            <arg value="htmls/index.html"/>
        </exec>
    </target>
</project>
。。。等待更多信息。。。
... 在它出现之前,我的猜测是在htmls/index.html中没有文件

我没有找到这个错误的根本原因。但我最终还是成功了

类文件似乎需要保存在源文件的相同目录中。因此build.xml如下所示:

<project>
<target name="compile">
    <mkdir dir="build/classes"/>
    <javac srcdir="src" destdir="src" includeantruntime="false"/>
</target>

<target name="clean">
    <delete dir="build"/>
</target>

<target name="jar">
    <mkdir dir="build/jar"/>
    <jar destfile="build/jar/jsoupIns.jar" basedir="src">
        <manifest>
            <attribute name="Main-Class" value="org.jsoup.examples.HtmlToPlainText"/>
        </manifest>
    </jar>
</target>

<target name="run">
    <!--<java jar="build/jar/jsoup.jar"  destdir="build/classes" input="htmls/index.html" fork="true"/>-->
    <exec executable="java">
        <arg value="-jar"/>
        <arg value="build/jar/jsoupIns.jar"/>
        <arg value="http://www.google.com"/>
    </exec>
</target>
</project>

如果你知道这个问题更深层次的原因,请告诉我。谢谢

我没有找到这个错误的根本原因。但我最终还是成功了

类文件似乎需要保存在源文件的相同目录中。因此build.xml如下所示:

<project>
<target name="compile">
    <mkdir dir="build/classes"/>
    <javac srcdir="src" destdir="src" includeantruntime="false"/>
</target>

<target name="clean">
    <delete dir="build"/>
</target>

<target name="jar">
    <mkdir dir="build/jar"/>
    <jar destfile="build/jar/jsoupIns.jar" basedir="src">
        <manifest>
            <attribute name="Main-Class" value="org.jsoup.examples.HtmlToPlainText"/>
        </manifest>
    </jar>
</target>

<target name="run">
    <!--<java jar="build/jar/jsoup.jar"  destdir="build/classes" input="htmls/index.html" fork="true"/>-->
    <exec executable="java">
        <arg value="-jar"/>
        <arg value="build/jar/jsoupIns.jar"/>
        <arg value="http://www.google.com"/>
    </exec>
</target>
</project>

如果你知道这个问题更深层次的原因,请告诉我。谢谢

jar文件需要包含jar目录org/jsoup/nodes中的文件entities-base.properties和entities-full.properties。向ant jar任务添加一个文件集以包含这些文件就足够了

<target name="local.all.build" >

   <echo message="Building ${local.app.jar.name}" />
   <mkdir dir="${top.dirs.class}"/>
   <mkdir dir="${top.dirs.jar}"/>

   <javac srcdir            = "${local.dirs.source}"
          destdir           = "${top.dirs.class}"
          debug             = "true"
          includeantruntime = "false" >
      <classpath refid="top.app.classpath"/>
      <compilerarg value="-Xlint:unchecked" />
   </javac>

   <jar jarfile   = "${top.dirs.jar}/${local.app.jar.name}"
        basedir   = "${top.dirs.class}" >
      <fileset dir      = "${top.dirs.source}"
               includes = "**/*.properties" />
   </jar>

</target>

jar文件需要包含jar目录org/jsoup/nodes中的文件entities-base.properties和entities-full.properties。向ant jar任务添加一个文件集以包含这些文件就足够了

<target name="local.all.build" >

   <echo message="Building ${local.app.jar.name}" />
   <mkdir dir="${top.dirs.class}"/>
   <mkdir dir="${top.dirs.jar}"/>

   <javac srcdir            = "${local.dirs.source}"
          destdir           = "${top.dirs.class}"
          debug             = "true"
          includeantruntime = "false" >
      <classpath refid="top.app.classpath"/>
      <compilerarg value="-Xlint:unchecked" />
   </javac>

   <jar jarfile   = "${top.dirs.jar}/${local.app.jar.name}"
        basedir   = "${top.dirs.class}" >
      <fileset dir      = "${top.dirs.source}"
               includes = "**/*.properties" />
   </jar>

</target>

恐怕你的问题以目前的形式没有包含足够的信息。build.xml不适用于ant的最新版本,例如1.8.2和htmls/index.html中的内容?您使用的是jsoup源代码1.6.3的最新版本吗?StateTrace也不是jsoup的一部分-这是您自己的代码吗?我很高兴看到你的问题,但我需要足够的信息来重现它。@richj谢谢你的提问。你说得对。让我提供更多信息。请查看问题的更新版本。谢谢提供额外信息。请在StateTrace.main中添加代码行。。。这将调用Jsoup.parse。。。。我对发送到html和[optional]baseUri参数的值特别感兴趣。谢谢。@richj我更新了问题。Jsoup库的调用非常简单。我还尝试了Jsoup.connecturl.get。但同样的错误,我可以重现你的问题。从IDE运行一切正常,从ant执行jar失败,并使用相同的stacktrace。到目前为止,我发现两者之间的唯一区别是jar包含六个package-info.class文件,以及通常的jar文件meta-inf文件。恐怕您的问题没有包含足够的当前形式的信息。build.xml不适用于ant的最新版本,例如1.8.2和htmls/index.html中的内容?您使用的是jsoup源代码1.6.3的最新版本吗?StateTrace也不是jsoup的一部分-这是您自己的代码吗?我很高兴看到你的问题,但我需要足够的信息来重现它。@richj谢谢你的提问。你说得对。让我提供更多信息。请查看问题的更新版本。谢谢提供额外信息。请在StateTrace.main中添加代码行。。。这将调用Jsoup.parse。。。。我对发送到html和[optional]baseUri参数的值特别感兴趣。谢谢。@richj我更新了问题。Jsoup库的调用非常简单。我还尝试了Jsoup.connecturl.get。但同样的错误,我可以重现你的问题。从IDE运行一切正常,从ant执行jar失败,并使用相同的stacktrace。到目前为止,我发现两者之间的唯一区别是jar包含六个package-info.class文件,以及通常的jar文件meta-inf文件,正如预期的那样。但我也犯了同样的错误,我只是使用了您提供的build.xml,将htmls/index.html替换为一个真实的url。但我也犯了同样的错误。