1

以下のコードを使用するantタスクを作成しています:

public class Klazz extends Task{    
    public void execute() throws BuildException{

        HtmlUnitDriver driver = new HtmlUnitDriver();
        driver.get("file:///C:/sample/alltests-fails.html");
}

Eclipse では、名前付きのプロジェクトは「test-project」であり、classpath に追加されるjar ( ant.jar、selenium-server-standalone-2.44.0.jar ) を含む「 libs」フォルダーを使用しました。Eclipse でコードを実行すると問題なく動作しますが、Ant タスクとして実行している間は java.lang.ExceptionInInitializerError がスローされます。以下は、 %ant_home%\lib フォルダーに配置する必要がある jar ファイル( custom-task.jarという名前) を作成するための build.xml スニペットです。

<target name="jar" depends="compile" >
        <mkdir dir="build/jar" />
        <jar destfile="${env.ANT_HOME}/lib/custom-task.jar">
            <fileset dir="build/classes" />         
            <restrict>
                <name name="**/*.class" />
                <archives> 
                    <zips>
                        <fileset dir="${basedir}/libs/" includes="**/*.jar" />
                    </zips>
                </archives>
            </restrict>
        </jar>
    </target>

上記の「jar」タスクで jar を作成しているときに、外部の jar/classes がクラス パスに正しく追加されていない可能性があります。その結果、一部のクラス ファイルが欠落し、ExceptionInInitializerErrorが発生します。これについての助けに感謝します。

以下はスタックトレースです:

java.lang.ExceptionInInitializerError
        at org.cyberneko.html.HTMLScanner.scanEntityRef(HTMLScanner.java:1415)
        at org.cyberneko.html.HTMLScanner$ContentScanner.scan(HTMLScanner.java:2
059)
        at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:920)
        at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:499
)
        at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:452
)
        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
        at com.gargoylesoftware.htmlunit.html.HTMLParser$HtmlUnitDOMBuilder.pars
e(HTMLParser.java:926)
        at com.gargoylesoftware.htmlunit.html.HTMLParser.parse(HTMLParser.java:2
45)
        at com.gargoylesoftware.htmlunit.html.HTMLParser.parseHtml(HTMLParser.ja
va:191)


       at com.gargoylesoftware.htmlunit.DefaultPageCreator.createHtmlPage(Defau
ltPageCreator.java:268)
        at com.gargoylesoftware.htmlunit.DefaultPageCreator.createPage(DefaultPa
geCreator.java:156)
        at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient
.java:455)
        at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:329)
        at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:394)
        at org.openqa.selenium.htmlunit.HtmlUnitDriver.get(HtmlUnitDriver.java:4
77)
        at org.openqa.selenium.htmlunit.HtmlUnitDriver.get(HtmlUnitDriver.java:4
66)

at mypkg.Klazz.execute(Klazz.java:15)

       at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
        at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.jav
a:106)
        at org.apache.tools.ant.Task.perform(Task.java:348)
        at org.apache.tools.ant.Target.execute(Target.java:435)
        at org.apache.tools.ant.Target.performTasks(Target.java:456)
        at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1364)
        at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExe
cutor.java:41)
        at org.apache.tools.ant.Project.executeTargets(Project.java:1248)
        at org.apache.tools.ant.Main.runBuild(Main.java:851)
        at org.apache.tools.ant.Main.startAnt(Main.java:235)
        at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
        at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
Caused by: java.lang.NullPointerException
        at java.util.Properties$LineReader.readLine(Properties.java:434)
        at java.util.Properties.load0(Properties.java:353)
        at java.util.Properties.load(Properties.java:341)
        at org.cyberneko.html.HTMLEntities.load0(HTMLEntities.java:101)
        at org.cyberneko.html.HTMLEntities.<clinit>(HTMLEntities.java:53)
        ... 33 more

Total time: 2 seconds
4

2 に答える 2

1

クラスの読み込みに問題があった場合、aNoClassDefFoundErrorまたは aClassNotFoundExceptionが発生すると思います

通常、注意を引く必要はありません。ExceptionInInitializerError「プログラマー、初期化ブロック内で例外が発生しました」としか表示されないためです。

初期化ブロックの詳細はこちら

したがって、NPE に対処すれば問題は解決しますが、残念ながら、これを引き起こした可能性のあるコードにはアクセスできません。お知らせください。回答を編集します。

于 2014-10-28T15:56:41.950 に答える
1

@Vlad Ilie ご覧いただきありがとうございます。解決しました。問題は jar 作成 ant スクリプトにあります。jar 作成のための以前の ant タスクは、クラス パス内のすべての jar をクラブすることができず、結果として ... classnotfoundexception が発生し、これが ExceptionInInitializerError および NullPointerException を引き起こしました。

以下は、クラスパスにすべてのjarを正常に追加できる修正された「jar」タスクです。

<target name="jar" depends="compile">       
        <jar destfile="${env.ANT_HOME}/lib/custom-task.jar" basedir="build/classes" >           
            <zipgroupfileset dir="${basedir}/libs/" includes="*.jar"/>      
        </jar>
    </target>

上記では、非常に便利な zipgroupfileset を使用しました。

于 2014-10-29T12:47:03.673 に答える