javac не может импортировать классы в проект - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь запустить тест из командной строки Windows, используя следующий способ, описанный во многих руководствах:

javac -cp .;"c:\full\path\to\junit-4.12.jar" test\java\ColorTest.java

, но в результате у меня возникают ошибки компиляции в каждой строке:

public class ColorTest extends BaseTest{
                               ^
  symbol: class BaseTest
src\test\java\ColorTest.java:14: error: cannot find symbol
        homePage.goToHomePage();
        ^
  symbol:   variable homePage
  location: class ColorTest
src\test\java\ColorTest.java:15: error: cannot find symbol
        homePage.moveToElement(HomePage.letterR, X_OFFSET, Y_OFFSET);
                               ^
  symbol:   variable HomePage
  location: class ColorTest
src\test\java\ColorTest.java:15: error: cannot find symbol
        homePage.moveToElement(HomePage.letterR, X_OFFSET, Y_OFFSET);
        ^

Когда я добавляю в команду все свои классы (BaseTest, HomeTest ...) или использую в команде *.java - я получаю ошибки в каждом другом классе (WebDriver, ArrayList и т. Д.).

Также попробуйте объединить все библиотеки из моего локального репо:

javac -cp .;"c:\full\path\to\.m2\repositories\*" test\java\ColorTest.java

Но в этом случае javac не увидел даже пакет junit в первой строке.

src\test\java\ColorTest.java:1: error: package org.junit does not exist
import org.junit.Test;
                ^
src\test\java\ColorTest.java:2: error: package org.junit does not exist
import org.junit.Assert;

  • Почему javac не импортирует какие-либо классы?
  • Как правильно скомпилировать тестовые классы из командной строки с помощью javac и запустить их с помощью java?

1 Ответ

1 голос
/ 19 сентября 2019

Поскольку вы компилируете в Windows, вам необходимо использовать совместимый с Windows разделитель пути к классам:

javac -cp .;c:\full\path\to\junit-4.12.jar test\java\ColorTest.java

или, возможно,

javac -cp .;"c:\full\path\to\junit-4.12.jar" test\java\ColorTest.java

Примечание: точка с запятой, а не двоеточие.


Мой лучший способ: javac -cp c: \ full \ path \ to \ junit-4.12.jar test \ java \ ColorTest.java.В этом случае я не получаю ошибки в import .... strings.

Но вы все равно получили ошибки для классов, которые НЕ содержатся в JAR-файле Junit.Правильно?

ИМО, что вам нужно сделать:

  • прочитайте страницу руководства Oracle, чтобы команда javac поняла -cp и, возможно, -dи / или -sourcepath.

  • прочитайте справочную страницу Oracle для Classpath, чтобы понять, что все это на самом деле означает.

Путь к классам - это то, что позволяет javac находить скомпилированные версии других классов, от которых зависит ваш код.Это важная концепция.Это хорошая идея, чтобы действительно понять это ... вместо того, чтобы полагаться на материал, скопированный из сомнительных или неприменимых примеров.

В вашем случае ваши классы юнит-теста будут зависеть от классов Junit И от скомпилированные классы, которые ваш тестовый код пытается проверить.Если дерево каталогов, содержащее последние, отсутствует в пути к классам, или они не были скомпилированы, то javac будет жаловаться.

Теперь я не могу разобраться, если все еще идет компиляция "не могу найти символ"ошибки.Но если это так, и классы, которые javac не могут найти, действительно существуют, то либо вы их не скомпилировали, либо они не находятся в пути к классам ... правильным способом.


Наконец вы спрашиваете:

Как правильно запустить тесты из командной строки через javac?

Это не имеет смысла.Вы используете от javac до классов .Для их запуска вы используете java.

В этом разделе вопросов и ответов объясняется, как запускать тесты Junit:

Иобратите внимание, что вам нужно также правильно указать classpath с java.

...