Как скомпилировать java-пакеты с помощью javac
цель
Я пытаюсь скомпилировать (из командной строки) пакет java, который импортирует другой пакет.
предыдущая работа
Я следил за учебным пособием, расположенным по адресу: http://www.roseindia.net/java/master-java/createsubpackage.shtml
но кажется, что я получаю сообщение об ошибке, когда пытаюсь скомпилировать последний файл java (CallPackage.java).
Структура файла примера
Вот структура файла:
+test_directory (contains CallPackage.java)
-> importpackage
-> subpackage (contains HelloWorld.java)
код
здесь CallPackage.java
/// CallPackage.java
import importpackage.subpackage.*;
class CallPackage{
public static void main(String[] args){
HelloWorld h2=new HelloWorld();
h2.show();
}
}
и вот HelloWorld.java
///HelloWorld.java
package importpackage.subpackage;
public class HelloWorld {
public void show(){
System.out.println("This is the function of the class HelloWorld!!");
}
}
Попытка шагов
Ошибка компилятора
но я получаю сообщение об ошибке на последнем cmd:
CallPackage.java:1: package importpackage.subpackage does not exist
import importpackage.subpackage.*;
^
CallPackage.java:4: cannot find symbol
symbol : class HelloWorld
location: class CallPackage
HelloWorld h2=new HelloWorld();
^
CallPackage.java:4: cannot find symbol
symbol : class HelloWorld
location: class CallPackage
HelloWorld h2=new HelloWorld();
^
3 errors
Большое спасибо за любую помощь!
-Питер
Ответы
Ответ 1
Вы уверены, что importpackage/subpackage находится в вашем пути к классу?
-cp path или -classpath путь
Укажите, где найти файлы классов пользователя и (необязательно) процессоры аннотаций и исходные файлы. Этот путь класса переопределяет путь пользовательского класса в переменной среды CLASSPATH. Если ни CLASSPATH, -cp ни -classpath не указаны, путь к пользовательскому классу состоит из текущего каталога. Подробнее см. Установка пути к классу.
Если параметр -sourcepath не указан, путь к пользовательскому классу также выполняется для исходных файлов.
Если опция -processorpath не указана, путь к файлу также просматривается для обработчиков аннотаций.
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html
Ответ 2
Проблема заключалась в том, что путь класса должен быть установлен для каждой команды (javac и java):
Попытка шагов
-
вместо перехода на подпакет, скомпилируйте HelloWorld.java из top_level:
$javac -cp . importpackage/subpackage/HelloWorld.java
-
скомпилировать CallPackage.java таким же образом:
$javac -cp . CallPackage.java
-
запустите файл, используя путь класса:
$java -cp . CallPackage
ПРИМЕЧАНИЕ: запуск "$ java CallPackage" приведет к ошибке "Ошибка: не удалось найти или загрузить основной класс CallPackage"
Таким образом, на каждом шаге должен указываться путь к классу. Он работал после запуска как таковой.
Ответ 3
(1) сначала скомпилируйте код
javac -d importpackage.subpackage.HelloWorld
(2), а затем скомпилируйте CallPackage.java
javac CallPackage.java
Ответ 4
Такая же ситуация для меня. И я пришел, чтобы взять на себя это, собрав классы в одно и то же время.
Например, вот мой проект:
+ beerV1
-> classes
-> src
-> com
-> example
-> model
-> BeerExpert.java
-> web
-> BeerSelect.java
BeerExpert.java:
package com.example.model;
import ...
public class BeerExpert{
...
}
BeerSelect.java:
package com.example.web;
import com.example.model.*;
import ...
public class BeerSelect {
...
}
Как вы можете видеть: BeerSelect.java пытается импортировать классы в пакет com.example.model.
В первый раз я скомпилировал BeerExert.java по команде:
--> javac -d classes src/com/example/model/BeerExpert.java
Затем:
--> javac -d classes src/com/example/web/BeerSelect.java
И в результате получилось:
-->... error: package com.example.model does not exist
Итак, я знал, что компиляция нескольких классов отдельно не будет работать в этом случае.
После страдания в google я нашел этот очень простой способ решить проблему:
Просто скомпилируйте все сразу:
--> javac -d classes src/com/example/model/BeerExpert.java src/com/example/web/BeerSelect.java
Наконец, вот что я получил:
+ beerV1
-> classes
-> com
-> example
-> model
-> BeerExpert.class
-> web
-> BeerSelect.class
-> src
-> com
-> example
-> model
-> BeerExpert.java
-> web
-> BeerSelect.java
Надеюсь, что это поможет.