еще одно java.lang.ClassNotFoundException в задании муниса - PullRequest
8 голосов
/ 01 августа 2009

Я не могу понять, почему я получаю это исключение из моего файла ant build.xml. Я проверил, и все в classpath. Почему это должно быть так сложно?!

В прошлом у меня были проблемы с Ant, и кажется, что это всегда что-то, связанное с classpath. Я указываю на junit.jar, используя оба пути: в eclipse: window-> preferences-> ant-> runtime-> Ant Home-> Add External Jars, а также в сценарии build.xml. На этот раз Ant не может найти мой тестовый класс в задании junit. Что-то не так с тем, как я указываю на этот класс?

<target name="init">
    <property name="sourceDir" value="src"/>
    <property name="outputDir" value="build" />
    <property name="junitLocation" value="C:\...\org.junit4_4.3.1\junit.jar" /> 
</target>

<target name="clean" depends="init">
    <delete dir="${outputDir}" />
</target>

<target name="prepare" depends="clean">
    <mkdir dir="${outputDir}" />
</target>

<target name="compile" depends="prepare">
     <javac srcdir="${sourceDir}" destdir="${outputDir}" classpath="${junitLocation}"/>
</target>

<path id="classpath">
   <pathelement location="${outputDir}" />
   <pathelement location="${junitLocation}" />
</path>

<target name="testApplication" depends="compile">
    <echo>Running the junit tests...</echo>
    <junit fork="yes" haltonfailure="yes">
        <test name="my.package.MyTest" />
        <formatter type="plain" usefile="false" />      
        <classpath refid="classpath" />
    </junit>
</target>

Я всегда получаю:

    [junit] Testsuite: my.package.MyTest
    [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec
    [junit]     Caused an ERROR
    [junit] my.package.MyTest
    [junit] java.lang.ClassNotFoundException: my.package.MyTest
    [junit]     at java.net.URLClassLoader$1.run(Unknown Source)
    [junit]     at java.security.AccessController.doPrivileged(Native Method)
    [junit]     at java.net.URLClassLoader.findClass(Unknown Source)
    [junit]     at java.lang.ClassLoader.loadClass(Unknown Source)
    [junit]     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    [junit]     at java.lang.ClassLoader.loadClass(Unknown Source)
    [junit]     at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    [junit]     at java.lang.Class.forName0(Native Method)
    [junit]     at java.lang.Class.forName(Unknown Source)

BUILD FAILED

Очевидно, Ant находит junit.jar и пытается запустить тест, но почему он не может найти мой тестовый класс? Я указываю на папку с скомпилированным тестовым классом. Так что я знаю, что джунит, по крайней мере, находится на пути к классу Ант, но ClassNotFound меня озадачивает.

Возможно, есть идеи? Большое спасибо!

Ответы [ 2 ]

6 голосов
/ 01 августа 2009

Вы уверены, что ваш тестовый класс находится в папке build? Вы вызываете junit в отдельной JVM (fork = true), поэтому возможно, что рабочая папка изменится во время этого вызова, а build будет относительным, что может вызвать проблему.

Запустите ant из командной строки (не из Eclipse) с ключом -verbose или -debug, чтобы увидеть подробный путь к классу / рабочий каталог junit вызывается с помощью и отправлять результаты сюда, если вы все еще не можете разрешить этот вопрос.

2 голосов
/ 01 августа 2009

Вам не нужно добавлять банку JUnit в путь к классам. Если муравей не может его найти, задача <junit> не запустится.

Я предлагаю попробовать различные способы указания пути к классам, как описано в ant doc на http://ant.apache.org/manual/using.html#path;, в частности <classpath path="${srcdir}" /> может помочь.

Если нет, то ChssPly76 предложит запустить ant -debug из командной строки. Вы захотите увеличить буфер в окне командной строки, потому что отладчик ant очень многословен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...