как скомпилировать структуры пакетов java с помощью javac

цель

Я пытаюсь скомпилировать (из командной строки) пакет java, который импортирует другой собственный пакет.

предыдущей работы

я следовал учебник онлайн, расположенный по адресу:http://www.roseindia.net/java/master-java/createsubpackage.shtml

но кажется, что я получаю ошибку, когда пытаюсь скомпилировать окончательный файл java (CallPackage.ява.)

Структура Файла пример

вот структура файла:

+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();
  }
}

и вот это.java

///HelloWorld.java

package importpackage.subpackage;

public class HelloWorld {
  public void show(){
  System.out.println("This is the function of the class HelloWorld!!");
  }
}

Покушение На Действия

  1. перейдите в подпакет и скомпилируйте HelloWorld.java

    $javac и типа HelloWorld.java

  2. перейдите в test_directory и скомпилируйте CallPackage.java

    $javac CallPackage.java

Ошибка Компилятора

но я получаю ошибку на последнем 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

большое спасибо за любую помощь!

Петр

4 ответов


вы уверены, что importpackage / subpackage находится в вашем пути к классам?

- CP путь или-classpath путь

укажите, где найти файлы классов пользователей и (необязательно) процессоры аннотаций и исходные файлы. Этот путь к классу переопределяет путь к классу пользователя в переменной среды CLASSPATH. Если не указан ни CLASSPATH, ни-CP, ни-classpath, путь к классу пользователя состоит из текущего каталога. Дополнительные сведения см. В разделе Настройка пути к классу.

Если -sourcepath опция не определяется, пользователь, путь Class также ищется исходные файлы.

Если -processorpath опция не определяется, путь к классу также ищется процессоры аннотации.

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html


проблема заключалась в том, что путь к классу должен быть установлен для каждой команды (javac и java):

Попытка Шагов

  1. собираюсь подпакет, скомпилировать файл HelloWorld.Java из top_level:

    $javac -cp . importpackage/subpackage/HelloWorld.java

  2. скомпилировать CallPackage.java таким же образом:

    $javac -cp . CallPackage.java

  3. запустите файл, используя путь к классу также:

    $java -cp . CallPackage

Примечание: запуск " $java CallPackage "даст ошибку"Ошибка: не удалось найти или загрузить основной класс CallPackage"

таким образом, на каждом шаге должен быть указан путь к классу. Он работал после запуска его как такового.


(1)Сначала скомпилируйте код

javac-d importpackage.субпакет.Файл HelloWorld

(2), а затем скомпилируйте CallPackage.java

javac CallPackage.java


та же ситуация для меня. И я пришел, чтобы взять его на себя, составляя классы в то же время.
Например, вот мой проект:

+ 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.образец.модель пакета.
В первый раз я собрал 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

надеюсь, что помогает.