2013-03-02 2 views
1

Я новичок с Ant, но у меня есть проблема, когда я пытаюсь использовать JUnit:Java Ant Error: ClassNotFoundException

<target name="test" depends="compile" description="JUnit Tests"> 
    <junit printsummary="yes" failureproperty="junit.failure" fork="yes"> 
     <classpath refid="junit.classpath"/> 
     <classpath path="${myAntTestBin.dir}"/> 
     <formatter type="plain" usefile="false"/> 
     <test name="fr.isima.myAntTest.ProjectTest"/> 
    </junit> 
</target> 

Но теперь у меня есть эти ошибки:

test: 
    [junit] Running fr.isima.myAntTest.ProjectTest 
    [junit] Testsuite: fr.isima.myAntTest.ProjectTest 
    [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec 
    [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec 
    [junit] 
    [junit]  Caused an ERROR 
    [junit] fr.isima.myAntTest.ProjectTest 
    [junit] java.lang.ClassNotFoundException: fr.isima.myAntTest.ProjectTest 
    [junit]  at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    [junit]  at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    [junit]  at java.security.AccessController.doPrivileged(Native Method) 
    [junit]  at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    [junit]  at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
    [junit]  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 

    [junit]  at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    [junit]  at java.lang.Class.forName0(Native Method) 
    [junit]  at java.lang.Class.forName(Class.java:186) 
    [junit] 
    [junit] Test fr.isima.myAntTest.ProjectTest FAILED 

Что это проблема? Спасибо заранее!

ответ

1

Я подозреваю, что это проблема:

<test name="${myAntTestBin}/ProjectTest.class"/> 

Он ищет имя класса, а не место:

<test name="ProjectTest"/> 

... с именем пакета расценив его в случае необходимости (которые вы действительно должны иметь, конечно). Так, например:

<test name="foo.bar.ProjectTest" /> 

И также, а упоминает JB Nizet, это:

<classpath path="${myAntTestBin}"/> 

должно быть:

<classpath path="${myAntTestBin.dir}"/> 

, чтобы соответствовать вашей декларации:

<property name="myAntTestBin.dir" value="../myAntTest/bin/fr/isima/myAntTest"/> 

EDIT: Теперь, когда вы редактировали вопрос (полностью), похоже, что у вас есть неправильный путь к классам, и это должно быть на самом деле:

<property name="myAntTestBin.dir" value="../myAntTest/bin"/> 

Путь к классам должен быть база структуры каталогов, содержащих ваши классы. Это так же, как в обычном Java, когда вы запустите:

java -cp bin foo.bar.Baz 

если вы имели структуру каталогов bin/foo/bar, содержащих Baz.class.

+0

Спасибо, я изменил путь к классу с именем пакета, как вы сказали, но все еще есть некоторые ошибки (я отредактировал мой вопрос). – bryan63

+0

@ bryan63: Вы сделали этот ответ совершенно глупым, поскольку он не отражает ваш вопрос вообще. Было бы лучше * добавить * к вашему вопросу, а не избавиться от первой версии. Однако, похоже, что ваш путь к классу неверен - отредактируйте ответ, чтобы объяснить. –

+0

Спасибо, класс найден, но теперь проблема в том, что мои тесты используют классы из другого пакета: мой тест класса находится в: «fr.isima.myAntTest», а другие классы находятся в: «fr.isima.MyAnt2 ». На самом деле это два разных проекта, как присоединиться к этим пакетам для выполнения моих тестов? – bryan63

Смежные вопросы