|
|
|
Пулучить директорию проекта
|
|||
|---|---|---|---|
|
#18+
Как в Java получить директорию проекта ? Я пробую Код: java 1. 2. 3. Но мой вариант возвращает директорию где лежит eclipse. А мне нужен путь по которому лежит проект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 13:00 |
|
||
|
Пулучить директорию проекта
|
|||
|---|---|---|---|
|
#18+
Andrey3k, Во-первых надо понимать что "проект" это ваш исходный код. А рантайме его не существует. В рантайме существуют классы и точка входа. Если это понятно, то далее надо различать две вещи 1) Текущий каталог - его значение зависит от того как именно пользователь запустил Java Runtime. Иногда совпадает с тем что вы ищете. Код: java 1. 2. По аналогии, возможно, работает и Код: java 1. 2) Местонахождение бинарников. По памяти примерно так: Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 13:09 |
|
||
|
Пулучить директорию проекта
|
|||
|---|---|---|---|
|
#18+
Blazkowicz2) Местонахождение бинарников Не факт, что бинарники обязательно загрузились с файловой системы (могли и по сети придти, например: аплеты, RMI) и путь к ним, в большинстве сред, ничего не значит. IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 13:23 |
|
||
|
Пулучить директорию проекта
|
|||
|---|---|---|---|
|
#18+
Andrey3kА мне нужен путь по которому лежит проект. такие вещи в конфиг выносят или параметром передают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 13:47 |
|
||
|
Пулучить директорию проекта
|
|||
|---|---|---|---|
|
#18+
Penkov Vladimirтакие вещи в конфиг выносят который поместить в проект) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 13:55 |
|
||
|
Пулучить директорию проекта
|
|||
|---|---|---|---|
|
#18+
Petro123, Petro123Penkov Vladimirтакие вещи в конфиг выносят который поместить в проект) в /etc/app-name конечно же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 13:58 |
|
||
|
Пулучить директорию проекта
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevНе факт, что бинарники обязательно загрузились с файловой системы (могли и по сети придти, например: аплеты, RMI) и путь к ним, в большинстве сред, ничего не значит. IMHO & AFAIK Я бы за "большинстве сред" не ручался. Там где такой путь нужен, бинарники лежат в файловой системе. Для JEE приложений, очевидно, фича бесполезная. Для standalone - вполне себе нормальная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 14:19 |
|
||
|
Пулучить директорию проекта
|
|||
|---|---|---|---|
|
#18+
я так определяю, работает и в линуксах и в окнах Код: java 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2016, 11:30 |
|
||
|
Пулучить директорию проекта
|
|||
|---|---|---|---|
|
#18+
вадя, а объясни, пожалуйста, нам с Леонидом задлянафига это понадобилось в war модуле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2016, 11:39 |
|
||
|
Пулучить директорию проекта
|
|||
|---|---|---|---|
|
#18+
Почему-то мне кажется это странным Данные из classes, скорее всего, можно подгружать как ресурсы. (или через ServletContext или через тот же ClassLoader.getResourceAsStream) Поэтому нафига нужно получать к ним путь, не очень ясно. К тому же, код с substr'ами, replace'ами выглядит на редкость корявым. IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2016, 11:53 |
|
||
|
Пулучить директорию проекта
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЯ бы за "большинстве сред" не ручался. Там где такой путь нужен, бинарники лежат в файловой системе. Для JEE приложений, очевидно, фича бесполезная. Для standalone - вполне себе нормальная. Ну "большинство" понятие относительное ))) Для standalone, даже в современных Windows принято, что код лежит в одном месте (только для чтения), а рабочий директорий скорее всего где- то другой (и свой у каждого пользователя). Т.ч. даже для standalone - это получается "одно пользовательское" решение, что сейчас уже выглядит как атавизм. Когда в начале 2000-х мы свое standalone приложение создавали и то пришлось столкнутся с проблемой, что ряд заказчиков работает на Windows Terminal Server. И директория, где лежит код, может оказаться совсем не personal и использовать ее "как хочешь" нельзя. IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2016, 11:59 |
|
||
|
Пулучить директорию проекта
|
|||
|---|---|---|---|
|
#18+
Blazkowiczвадя, а объясни, пожалуйста, нам с Леонидом задлянафига это понадобилось в war модуле? мне надо получить список файлов из папки WEB-INF/classes/wss/pages там из из каждого файла получить список методов. это список используется для вызова метода с помощью рефлексии. так наворочено - потому как это может запускаться и на продакшене под линуксом, и при разработке в netbeans под окнами. автор К тому же, код с substr'ами, replace'ами выглядит на редкость корявым. это для того чтоб можно было делать папки с пробелами в названиии. если есть вариант более красивый - прошу показать. данный работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2016, 12:05 |
|
||
|
Пулучить директорию проекта
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevДля standalone, даже в современных Windows принято, что код лежит в одном месте (только для чтения), а рабочий директорий скорее всего где- то другой (и свой у каждого пользователя). Т.ч. даже для standalone - это получается "одно пользовательское" решение, что сейчас уже выглядит как атавизм. Это все правильно и логично только для пользовательских файлов. Бинарники могут быть read only даже без всяких терминалов. Запрещать пользователю писать в Program Files - сейчас стандартная практика. Но есть куча сценариев, даже для чтения. Прочитать админский конфиг, запустить сопутствующую утилиту, и т.п. Но, выходит, на счет "большинства", ты, похоже, прав. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2016, 12:06 |
|
||
|
Пулучить директорию проекта
|
|||
|---|---|---|---|
|
#18+
вадя, Во-первых это стремный подход сам по себе. На много безопаснее вести реестр таких классов и его использовать. К тому же можно не ограничиваться одним пакетом. И для этого уже есть куча готовых решений вроде аннотаций и SPI, Spring Framework. Во-вторых в экзотических сценариях war может работать без распаковки, что делает использование java.io.File в решении задачи бесполезным. Ну, и в-третьих, существует масса готовых реализаций: Apache Commons Discovery, Guava ClassPath и всякие Reflections и FastClasspathScanner. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2016, 12:17 |
|
||
|
Пулучить директорию проекта
|
|||
|---|---|---|---|
|
#18+
Blazkowiczвадя, Во-первых это стремный подход сам по себе. На много безопаснее вести реестр таких классов и его использовать. К тому же можно не ограничиваться одним пакетом. И для этого уже есть куча готовых решений вроде аннотаций и SPI, Spring Framework. Во-вторых в экзотических сценариях war может работать без распаковки, что делает использование java.io.File в решении задачи бесполезным. Ну, и в-третьих, существует масса готовых реализаций: Apache Commons Discovery, Guava ClassPath и всякие Reflections и FastClasspathScanner. вести реестр - т.е. вручную туда заносить? это как-то не очень, я этот код написал и забыл. добавляю /удаляю методы, и больше ни о чем не заморачиваюсь. в моём случае эти классы и должны быть в одном пакете, в этом одна из особенностей. каждый класс "привязан" к одной странице web, и в нем все методы по обработки команд для этой странице. при изменении я просто правлю один фал .java и всё, больше никких изменений ни где. не надо помнить об изменении аннотаций и прочего. у меня нет экзотического применения - расчитано для работы с tomcat, а там war распаковывается. если масса готовых реализаций будет проще - покажи , я воспользуюсь. на момент написания кода я не смог найти более простого ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2016, 12:30 |
|
||
|
Пулучить директорию проекта
|
|||
|---|---|---|---|
|
#18+
вадямне надо получить список файлов из папки WEB-INF/classes/wss/pages там из из каждого файла получить список методов. это список используется для вызова метода с помощью рефлексии. так наворочено - потому как это может запускаться и на продакшене под линуксом, и при разработке в netbeans под окнами. В такой поставке задача через стандартное API вроде не решается. Беглый поиск по I-net выдает ссылку на Spring ф-цию: http://docs.spring.io/spring-framework/docs/2.5.x/api/org/springframework/core/io/support/PathMatchingResourcePatternResolver.html Но она реализована через такой же механизм, как и у Вас (только более подробный). В сложных ситуациях, когда ClassLoader не смотрит на файлы, а получает их как-то по другому - так же работать не будет. вадяэто для того чтоб можно было делать папки с пробелами в названиии. если есть вариант более красивый - прошу показать. данный работает. Это то понятно. Только есть ощущение, что не только пробелы могут так кодироваться, но и другие спец-символы / русские буквы. Поэтому код с replace'ами выглядит не сильно хорошо. getLocation по доке возврашает URL. Т.ч. было бы логично, вместо самодельного replace попытаться использовать какой нибудь метод URL encode/decode или File прямо из URL и конструировать. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2016, 12:32 |
|
||
|
Пулучить директорию проекта
|
|||
|---|---|---|---|
|
#18+
Разумно опираться на tmp.dir для временных файлов. Или на особые каталоги логгирования и переменные окружения веб-контейнеров. Опять-же если есть файловое хранилище - то оно обычно mount-ится отдельно и к нему путя знает админ. А просто так "срать под себя" в каталогах деплоя ни один нормальный админ не позволит. Вобщем всё зависит от целевого назначения проекта и мы ответа не узнаем т.к. автор-редиска сбежал и оставил нас один на один с вопросами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2016, 12:42 |
|
||
|
Пулучить директорию проекта
|
|||
|---|---|---|---|
|
#18+
вадявести реестр - т.е. вручную туда заносить? Да, хотя бы и вручную. Все лучше этого кода с кучей условностей. вадякаждый класс "привязан" к одной странице web, и в нем все методы по обработки команд для этой странице. Ну, вот о том и речь, что есть некий реестр страниц и таких классов. вадяпри изменении я просто правлю один фал .java и всё, больше никких изменений ни где. не надо помнить об изменении аннотаций и прочего. Это фантомная польза. Если ты добавляешь нужную страницу, ты все равно её тестируешь, поэтому не забудешь добавить её в реестр. вадяу меня нет экзотического применения - расчитано для работы с tomcat, а там war распаковывается. У меня, например, сейчас куча разношерстных небольших проектов в одной предметной области. Массу кода приходится пере-использовать. Ну, и вообще писать переносимый код считается хорошим тоном. вадяесли масса готовых реализаций будет проще - покажи , я воспользуюсь. на момент написания кода я не смог найти более простого Перечислил же выше. Опять же, сейчас JEE контейнеры вынуждены сканировать все классы на предмет аннотаций. https://wiki.apache.org/tomcat/HowTo/FasterStartUp Можно было бы хотя бы на эту фичу подсесть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2016, 12:48 |
|
||
|
Пулучить директорию проекта
|
|||
|---|---|---|---|
|
#18+
вадякаждый класс "привязан" к одной странице web, и в нем все методы по обработки команд для этой странице. вадямне надо получить список файлов из папки WEB-INF/classes/wss/pages там из из каждого файла получить список методов. это список используется для вызова метода с помощью рефлексии. Это типа маппинг урл на методы-классы? Код: java 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2016, 12:53 |
|
||
|
Пулучить директорию проекта
|
|||
|---|---|---|---|
|
#18+
BlazkowiczМожно было бы хотя бы на эту фичу подсесть. +1 вроде аннотации для этого и придумали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2016, 12:55 |
|
||
|
Пулучить директорию проекта
|
|||
|---|---|---|---|
|
#18+
авторЭто то понятно. Только есть ощущение, что не только пробелы могут так кодироваться, но и другие спец-символы / русские буквы. Поэтому код с replace'ами выглядит не сильно хорошо. getLocation по доке возврашает URL. Т.ч. было бы логично, вместо самодельного replace попытаться использовать какой нибудь метод URL encode/decode или File прямо из URL и конструировать. IMHO -согласен, но для себя ввел ограничения на русские названия папок , и снял часть проблем :) -было б не плохо, но бысто решения не нашёл, остановился на таком, не очень красивом... хотя и рабочем. к тому же web_location используется ещё в одном месте - для подключения нативных библиотек, разных для линукса и оконо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2016, 12:57 |
|
||
|
Пулучить директорию проекта
|
|||
|---|---|---|---|
|
#18+
вадя, В Tomcat есть JarScanner, на который можно было бы подсесть, но он, к сожалению, не предрасположен к пиггибэкингу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2016, 12:58 |
|
||
|
Пулучить директорию проекта
|
|||
|---|---|---|---|
|
#18+
авторЭто фантомная польза. Если ты добавляешь нужную страницу, ты все равно её тестируешь, поэтому не забудешь добавить её в реестр. было что-то подобное в начале - замаялся править... авторУ меня, например, сейчас куча разношерстных небольших проектов в одной предметной области. Массу кода приходится пере-использовать. Ну, и вообще писать переносимый код считается хорошим тоном. дак у меня этот код тож переносится один в один уже в нескольких проектах, без изменения - копи/пастом. весь(почти) Singleton 2Petro123 это методы по обработки команд для websocket :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2016, 13:04 |
|
||
|
Пулучить директорию проекта
|
|||
|---|---|---|---|
|
#18+
Код: java 1. 2. у меня для каждой страницы до 20+ команд, а обработка команды это метод из 10-20 строк кода, большая часть из которых "служебная" и городить сервлет на каждую команду - как-то не очень. рамещать в одном сервлете несколько команд - это тоже не очень - надо городить либо if либо swich что также не очень... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2016, 13:14 |
|
||
|
Пулучить директорию проекта
|
|||
|---|---|---|---|
|
#18+
вадя Код: java 1. 2. у меня для каждой страницы до 20+ команд, а обработка команды это метод из 10-20 строк кода, большая часть из которых "служебная" и городить сервлет на каждую команду - как-то не очень. рамещать в одном сервлете несколько команд - это тоже не очень - надо городить либо if либо swich что также не очень... это пример использования аннотаций....как технологии. Тебе сказали, что искать место в коде ВООБЩЕ или как то его помечать = аннотации. Это понятие шире чем сервлеты. Вполне могли подойти под твою задачу. Поэтому аннотации можно применять и без сервлетов. Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2016, 13:31 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39225650&tid=2124121]: |
0ms |
get settings: |
5ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
63ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 332ms |

| 0 / 0 |
