У чому різниця між Шляхом класу та Шляхом побудови


86

Мене плутають ці два терміни.

Також що мені робити, щоб створити файл у папці src Spring MVC Project? Коли я створюю за допомогою об'єкта File, він створює файл всередині C: \ SpringSourceTool ... Я думаю, це ClassPath, правда?

Як я можу отримати applicationcontextпапку або корінь програми?

Відповіді:


100

Шлях збірки використовується для побудови вашого додатка. Він містить усі ваші вихідні файли та всі бібліотеки Java, необхідні для компіляції програми.

Шлях до класам використовується для виконання програми. Це включає всі класи Java та бібліотеки, необхідні для запуску програми Java. Шлях до класу є обов'язковим, шлях за замовчуванням .використовується, якщо віртуальна машина Java не може знайти визначений користувачем шлях. ( CLASSPATHзмінна середовища, -cpпрапор або Class-Path:атрибут у маніфесті jar)


Але javac бере аргумент про шлях до класу. Чи можна сказати, що цей параметр "перевантажений" для вказівки шляху збірки?
aioobe

4
Ні. Аргумент classpath - це підказка для компілятора, що він повинен очікувати, щоб бути доступним / наданим під час виконання, оскільки ви не створюєте кожен клас, яким користуєтесь самостійно (наприклад, JFC, бібліотеки, ...). Шлях побудови містить як вихідні, так і / або вихідні / скомпільовані залежності та де їх шукати.
Йоханнес Вахтер,

Під час розробки плагіна я додав усі необхідні бібліотеки до шляху до класу, але не міг нічого імпортувати. Eclipse не бачив їх, поки я не додав їх для побудови шляху.
Бакс,

51

Шлях до класу - це звичайний спосіб вказати (стандартному) компілятору Java та середовищу виконання Java, де знайти скомпільовані класи. Зазвичай це послідовність імен файлів JAR та назв каталогів. Шлях до класу, який використовується компілятором, і система виконання не повинні бути однаковими, але вони, як правило, повинні бути , особливо для невеликого проекту.

Buildpath не є стандартною термінологією Java. Це термін для більш збагаченого способу, яким типова IDE визначає взаємозв'язок між "проектами", з яких складається заявка. IDE використовує це, щоб з’ясувати шлях до класу та шлях до джерела для компіляції коду Java та шлях до класу для його запуску. IDE також використовує шлях збірки, щоб зрозуміти, як упакувати ваш код та його залежності як (наприклад) файл WAR.

Наприклад, шлях побудови Eclipse для проекту включає інші проекти, від яких це залежить, і перелічує будь-які додаткові JAR-файли бібліотеки, які проект містить / на які покладається. Він також перелічує пакети поточного проекту, від яких можуть залежати подальші проекти.

(Якщо ви використовуєте Maven для свого проекту, механізм побудови IDE є вторинним щодо залежностей, оголошених у файлах POM. Наприклад, використовуючи Eclipse з m2eclipse, шлях побудови синтезується з файлів POM.)


27

Шлях до класу використовується під час виконання для завантаження зібраних класів та ресурсів.

Шлях збірки використовується під час компіляції для пошуку залежностей, необхідних для побудови вашого проекту.


Чи можете ви сказати, що шлях до класу використовується для пошуку .classфайлів (та інших скомпільованих ресурсів), тоді як шлях побудови використовується для пошуку вихідних файлів, які потрібно скомпілювати?
Адам

1
@Adam Я не думаю, що це цілком правда. Шляху збірки іноді потрібні файли .class для компіляції вихідних файлів. Отже шлях побудови також використовує шлях класу за лаштунками. Якщо вам знадобиться трохи часу на компіляцію та запуск проекту Java за допомогою інтерфейсу командного інтерфейсу Java, ви можете це побачити. Команда javac і java мають опцію шлях до класу, оскільки їм обом вона може знадобитися.
intrepistar_88

4

Кожен проект Java має власний шлях побудови, який визначає всі залежності, необхідні для компіляції проекту. Ці залежності можуть походити від інших проектів Java у робочій області, файлів архіву Java .jar або папок, що містять файли .class.

У середовищі CLASSPATH вам потрібно вказати лише файли .class (тобто jar, zip-файли - всередині jar, zip-файли ви знайдете лише класи Java), тобто ви допомагаєте Java Virtual Machine (JVM) знаходити файли класу Java

Також що мені робити, щоб створити файл у папці src Spring MVC Project? Коли я створюю за допомогою об'єкта File, він створює файл всередині C: \ SpringSourceTool ...

Тут було запущено JVM, якщо ви хочете створити файл в іншому місці, використовуйте відносний шлях звідси.

Дивіться це та це для отримання додаткової інформації.


Ви навіть не згадали шлях побудови у своїй відповіді.
aioobe

4

Я хотів би додати до відповіді Andreas_D, щоб пояснити, що шлях побудови потрібен IDE / компілятору для пошуку зовнішніх пакетів та класів, що використовуються вашим кодом. Ми іноді називаємо їх "залежностями" .

Примітка. Ці зовнішні пакунки можуть бути упаковані всередині стисненого файлу .jar, або, можливо, у "бібліотеці" може бути кілька файлів jar . Бібліотека або група бібліотек часто складають "структуру" .

Якщо для вашого коду потрібен код, написаний іншими, ви можете імпортувати їх у свій клас за допомогою importкоманди. Однак цієї команди само по собі недостатньо, оскільки компілятор або IDE повинні знати, де розташовані ці класи. Ви вказуєте це у шляху побудови .

З classpathіншого боку, повідомляє JVM, що запускає вашу програму, де знайти будь-які залежності під час фактичного виконання вашого коду.

Також на замітку: Classpath призначений для використання JVM.

Buildpath призначений для використання IDE / компілятором і є засобом побудови шляху шляху до класу з вашого середовища розробки. Коли ви налаштовуєте шлях побудови за допомогою IDE, ви також налаштовуєте прихований файл у своєму проекті, який називається .classpath. Це використовується для надання шляху до класу до JVM під час розгортання.


1

Шлях до класу ( з Вікіпедії ):

Подібно до класичної поведінки динамічного завантаження, під час виконання програм Java Віртуальна машина Java знаходить і завантажує класи ліниво (завантажує байт-код класу лише тоді, коли клас використовується вперше). Шлях до класу повідомляє Java, де шукати у файловій системі файли, що визначають ці класи.

Віртуальна машина шукає та завантажує класи в такому порядку:

класи початкової завантаження: класи, які є фундаментальними для платформи Java (що включають загальнодоступні класи бібліотеки класів Java та приватні класи, необхідні для функціонування цієї бібліотеки).

класи розширень: пакети, що знаходяться в каталозі розширень JRE або JDK,

jre / lib / ext / визначені користувачем пакети та бібліотеки

За замовчуванням доступні лише пакети стандартного API JDK та пакети розширень, не потрібно встановлювати, де їх знайти. Шлях для всіх визначених користувачем пакетів і бібліотек повинен бути встановлений у командному рядку (або в Маніфесті, пов'язаному з файлом Jar, що містить класи).

Простіше кажучи - поки ваша програма працює, JVM завантажує класи лише за потреби. Коли потрібен клас, JVM буде залежати від шляху до класу, щоб знати, звідки завантажувати байт-код (тобто: .classфайли).

З іншого боку, шлях побудови зазвичай використовується середовищем IDE, наприклад Eclipse, щоб знати, де шукати додаткові бібліотеки, необхідні для компіляції вихідного коду проекту. Шлях збірки не використовується під час виконання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.