Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > javac : как правильно откомпилировать?


Автор: AndreQ 27.1.2006, 00:57

Очень простая структура классов :

A.class
Код

public class A {
    
    public A() {
        System.out.println("Create A class");    
    }

}

class B {
    String name = "Это класс с доступом в пределах пакета.\n" + 
                "Почему же его не видит компилятор?";

    B() {
        System.out.println("Create B class");
    }    
}


C.class
Код

public class C {

    public static void main(String[] params) {
        // tested compiler
        new B();
    }
}


ком. строка :javac -sourcepath . C.java

Вопрос почему не находится класс "B"?
И самое главное как это откомпилировать?

p.s. вариант : javac -sourcepath . *.java - не предлагать




Автор: onsh76 27.1.2006, 03:59
Потому как наблюдается ошибка в классе С:
Код

 new B();
не прокатит! Обьект надо создать...
Вот так например:
Код

B b = new B();

Автор: batigoal 27.1.2006, 09:14
Цитата(onsh76 @ 27.1.2006, 04:59 Найти цитируемый пост)

не прокатит! Обьект надо создать...

Почему, вполне возможно такое.

AndreQ
А ты файл A.java предварительно скомпилировал?

Цитата(AndreQ @ 27.1.2006, 01:57 Найти цитируемый пост)

A.class

Это опечатка, или они у тебя действительно называются .class? Хотя это и не существенно.




У меня все нормально отработало:
Цитата

javac A.java

javac C.java

java C
Create B class

Автор: val 27.1.2006, 10:05
Цитата

И самое главное как это откомпилировать?


Рекомендую не заморачивать себе голову, а происталлировать какую-нибудь среду разработки, она и все пути пропишет и на ошибки укажет. Со своей стороны рекомендую Eclipse, но это вопрос вкуса. smile

Автор: batigoal 27.1.2006, 10:22
Цитата(val @ 27.1.2006, 11:05 Найти цитируемый пост)

Рекомендую не заморачивать себе голову, а происталлировать какую-нибудь среду разработки, она и все пути пропишет и на ошибки укажет.

А я как раз рекомендую заморачивать - так намного полезнее.

Автор: LSD 27.1.2006, 10:24
Проблема будет если класс B объявлен не в файле B.java, т.к. package private класс может быть объявлен в любом файле (хоть QQQ.java) компилятор не может просматривать их все в поисках нужного класса.

Автор: batigoal 27.1.2006, 10:35
Цитата(LSD @ 27.1.2006, 11:24 Найти цитируемый пост)

Проблема будет если класс B объявлен не в файле B.java, т.к. package private класс может быть объявлен в любом файле (хоть QQQ.java) компилятор не может просматривать их все в поисках нужного класса.

Компилятор же их, по-моему, вообще не просматривает. Он работает только в рамках того фала, который подан ему на вход.

Автор: LSD 27.1.2006, 11:23
Цитата(Lamer George @ 27.1.2006, 10:35 Найти цитируемый пост)
Компилятор же их, по-моему, вообще не просматривает. Он работает только в рамках того фала, который подан ему на вход.

Ну да, он их не просматривает. Но если ему будет нехватать класса Foo, то он по крайней мере попытается найти его в файле Foo.java и скомпилировать.

Автор: batigoal 27.1.2006, 11:57
Круто. Не знал.

Автор: onsh76 27.1.2006, 20:02
Цитата(Lamer George @ 27.1.2006, 09:14)
Цитата(onsh76 @  27.1.2006,  04:59 Найти цитируемый пост)

не прокатит! Обьект надо создать...

Почему, вполне возможно такое.

AndreQ
А ты файл A.java предварительно скомпилировал?

Цитата(AndreQ @ 27.1.2006, 01:57 Найти цитируемый пост)

A.class

Это опечатка, или они у тебя действительно называются .class? Хотя это и не существенно.




У меня все нормально отработало:
Цитата

javac A.java

javac C.java

java C
Create B class

Тормознул, пардон. smile

Автор: batigoal 27.1.2006, 22:55
Цитата

Каждый человек имеет право на немного потупить.

smile

Автор: AndreQ 28.1.2006, 03:34
Так что, получается невозможно из командной строки нормально скомпилить проект если в нём будут встречаться не public классы?
(Eclipse то, каким-то образом это проделывает)

Вариант скомпилить сначала класс А, а потом С малость неудобен для большого проекта в котором может быть туча таких ситуаций.
Добавлено @ 03:35
Так что, получается невозможно из командной строки нормально скомпилить проект если в нём будут встречаться не public классы?
(Eclipse то, каким-то образом это проделывает)

Вариант скомпилить сначала класс А, а потом С малость неудобен для большого проекта в котором может быть туча таких ситуаций.


Автор: LSD 28.1.2006, 12:49
Цитата(AndreQ @ 28.1.2006, 03:34 Найти цитируемый пост)
Так что, получается невозможно из командной строки нормально скомпилить проект если в нём будут встречаться не public классы?

1. Для сборки больших проектов лучше использовать средства посерьезней, типа ANT или Maven (у нас в FAQ есть статейка про ANT).
2. Помещай не public классы в отдельный файлы, так же как и public. Тогда компилятор справится с ними.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)