2012-07-06 5 views
2

jsoup 소스를 컴파일하기 위해 Ant를 사용하려고했습니다. 성공적으로 컴파일 할 수는 있지만 테스트를 통과 할 수는 없습니다. 다음은 과정입니다.Ant를 통해 jsoup를 컴파일하는 방법은 무엇입니까?

jsoup 버전 : 1.6.3; 개미 버전 : jsoup의 1.8.2

소스 내가

이 파일에 포함 된
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> 

참고 빌드 파일을 만든

src/ 

디렉토리에 있습니다 1. StateTrace.java는 내 자신의 테스트 프로그램입니다 (아래). 2. htmls/index.html은 StateTrace.java에 대한 입력입니다.

String html; // contains the content in htmls/index.html 
... 
try{ 
    Document doc = Jsoup.parse(html); 
}catch(IOException e){e.printStackTrace();} 

그럼 난 컴파일하고 개미와 실행이 후

> 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 

그러나, 나는 수동처럼 모든 자바 소스를 컴파일하는 경우

javac src/org/jsoup/*.java src/org/jsoup/parser/*.java src/org/jsoup/examples/*.java src/org/jsoup/nodes/*.java src/org/jsoup/safety/*.java src/org/jsoup/select/*.java src/org/jsoup/helper/*.java 

나는 할 수있다. com 성공적으로 파일을 쌓고 내 테스트를 통과합니다.

단서가 있습니까? 감사!

+1

질문에 현재 정보가 충분하지 않은 것 같습니다. build.xml은 최근 버전의 ant (예 : 1.8.2) 및 htmls/index.html에있는 항목과 작동하지 않습니다. jsoup 소스 코드 (1.6.3)의 최신 버전을 사용하고 있습니까? StateTrace는 jsoup의 일부가 아닙니다.이 코드는 고유 한 코드입니까? 나는 당신의 문제를 보아 기쁘지만, 그것을 재현 할 수있는 충분한 정보가 필요합니다. – richj

+0

@richj 질문에 감사드립니다. 네가 옳아. 좀 더 자세한 정보를 제공하겠습니다. 업데이트 된 버전의 질문을 참조하십시오. – JackWM

+0

추가 정보를 제공해 주셔서 감사합니다. StateTrace.main에 코드 줄을 추가하십시오 (...)는 Jsoup.parse (...)를 호출합니다. 특히 html 및 [선택 사항] baseUri 매개 변수로 전송되는 값에 관심이 있습니다. 감사. – richj

답변

0

이 된 build.xml 개미 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> 

... 그것을가 될 때까지, 내 ​​생각에는 파일이 없다는 것입니다 ... 자세한 내용은 ... 기다리고 at htmls/index.html

+0

방금 ​​제공 한 build.xml을 사용했습니다 ("htmls/index.html"을 실제 URL로 바꿨습니다). 하지만 같은 오류가 있습니다. – JackWM

0

이 오류의 근본 원인을 찾지 못했습니다. 그러나 나는 그것을 마침내 작동하게 만들었습니다.

클래스 파일은 소스 파일의 동일한 디렉토리에 보관해야합니다. 따라서 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> 

이 문제의 심오한 원인을 알고 있다면 알려 주시기 바랍니다. 감사!

0

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> 
관련 문제