Чем отличаются библиотеки времени компиляции и библиотеки времени выполнения в Java? - PullRequest
9 голосов
/ 22 июня 2010

А что за доводы "за" используют?

Я действительно видел это в Netbeans в разделе «Свойства проекта»> «Библиотеки для приложений Java». У нас есть две вкладки, одна для библиотек времени компиляции и библиотек времени выполнения, и, похоже, мы можем добавить библиотеку независимо друг от друга

Ответы [ 4 ]

11 голосов
/ 22 июня 2010

Нет такой вещи, как библиотеки времени компиляции против библиотеки времени выполнения

Возможно, вы смешиваете некоторые концепции.

ВJava используемые библиотеки статически проверяются во время компиляции, а также проверяются во время выполнения.

Например, если вы хотите использовать IterableMap, указанный в библиотеке Apache Collections .Компилятор проверяет «во время компиляции», что вы вызываете метод, который существует в этом классе.

Но компилятор не связывается или ничего не делает с этой библиотекой, он вам все еще нужен во время выполнения.Поэтому, когда ваш код выполняется, среда выполнения Java снова ищет этот класс и вызывает метод, который проверенный компилятором существует.

И это то, что есть.

7 голосов
/ 02 февраля 2011

Пользовательский интерфейс и терминология диалога свойств библиотек довольно запутанные.

Кнопка справки в этом диалоговом окне предоставит вам немало информации.

Список библиотек времени компиляции можетбыть подмножеством списка библиотеки времени выполнения.

Рассмотрим эту ситуацию ...

У вас есть исходный код, который импортирует классы из библиотеки 'widgets.jar'.Файлы классов в widgets.jar ссылаются на символы из файла jar 'xml.jar'.Если ваш исходный код не импортирует классы из xml.jar, вы можете определить список библиотек времени компиляции, который будет содержать только widgets.jar.

Когда вы пытаетесь запустить свой проект, вам, вероятно, потребуется включить xml.jar в списке библиотек времени выполнения для предотвращения исключения ClassNotFoundException.

1 голос
/ 26 апреля 2012

Возможно, это вступает в игру, когда вы хотите загрузить библиотеку динамически или проверить наличие библиотеки и затем выполнить код.

Во время компиляции компилятор должен знать, какие сигнатуры методов, классов и т. Д. Знать, правильно ли вы кодируете. Следовательно, вы добавляете библиотеку времени компиляции.

Во время выполнения JVM по-прежнему нужна библиотека для запуска этого конкретного кода. Но вы можете поместить логику, чтобы избежать этого кода, проверив, существует ли библиотека, например, выполнив метод Class.for(). Некоторые библиотеки могут уже существовать в системе (например, qt.jar) или нет, и вы можете проверить и выполнить свой код соответствующим образом.

Пожалуйста, поправьте меня, если я ошибаюсь.

0 голосов
/ 22 июня 2010

Как уже говорили другие, вы путаете понятия.Я думаю, что вы действительно пытаетесь понять, что Maven обозначает область зависимостей .Иногда вам нужна зависимость только во время компиляции, потому что вы ожидаете, что она будет предоставлена ​​во время выполнения, а иногда она вам нужна во время выполнения, но не во время компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...