Разрешения для приложения Java в Ubuntu

У меня есть приложение NetBeans RCP, которое в настоящее время работает в Windows, и я пытаюсь сделать его совместимым с Linux. Приложение создает папки и файлы, а также изменяет файлы.

Он отлично работает в Windows без каких-либо изменений, но в Ubuntu он не создает папки во время запуска. Я знаю, что это проблема с разрешением.

Каковы мои варианты?

Может ли само приложение назначать необходимые ему разрешения, например, запуская скрипт с помощью ProcessBuilder?

Заранее спасибо!


person javydreamercsw    schedule 07.04.2011    source источник
comment
Можете ли вы дать нам трассировку стека, вы абсолютно уверены, что создаете в каталоге пользователя, это настоящий пользователь? Нет прямого способа переключения пользователя, хотя, как и у вас, может быть команда sudo в сценарии, вы и выполняете назначение разрешений, но вам нужно будет каким-то образом предоставить пароль и предполагает, что у пользователя есть разрешение на это.   -  person vickirk    schedule 08.04.2011
comment
Я добавлю трассировку стека, когда вернусь домой к машине с Ubuntu. Я знаю, что это настоящий пользователь, потому что я использую свойство user.home для доступа к папке. Также при запуске приложения там создаются другие папки и файлы.   -  person javydreamercsw    schedule 08.04.2011
comment
Извините, под реальным пользователем я имел в виду реального человека, а не пользователя, скажем, для какой-то службы, такой как apache или oracle.   -  person vickirk    schedule 08.04.2011
comment
Пользователь — это пользователь, запускающий приложение. Вот часть ошибки:   -  person javydreamercsw    schedule 08.04.2011
comment
Пользователь — это пользователь, запускающий приложение. Я создал папку, на которую он жаловался, но в любом случае это не удалось: org.h2.jdbc.JdbcSQLException: ошибка файла журнала: /home/javier\marauroa.trace.db, причина: org.h2.jdbc.JdbcSQLException: Исключение ввода-вывода: java.io.FileNotFoundException: /home/javier\marauroa.trace.db (отказано в доступе); /home/javier\marauroa.trace.db [90031-128] [90034-128] Это встроенная база данных, которая не может создавать некоторые файлы.   -  person javydreamercsw    schedule 08.04.2011
comment
Инструкции по получению кода: sourceforge.net/scm/?type=svn&group_id=325779   -  person javydreamercsw    schedule 08.04.2011
comment
Пожалуйста, добавьте трассировку стека к вашему вопросу.   -  person asgs    schedule 08.04.2011
comment
@javy: Обновлен мой ответ, чтобы включить то, что я думаю об исключении.   -  person Eelke    schedule 08.04.2011
comment
Ничего общего с \ вместо /? Я использую linux/java почти все время (по иронии судьбы, я сейчас нахожусь в Windows, поэтому не могу проверить), но не помню, чтобы когда-либо пробовал \ в пути, попробуйте использовать fileSeperator для построения пути   -  person vickirk    schedule 08.04.2011


Ответы (2)


Все зависит от того, кто вы запускаете процесс в Ubuntu, и пути к папкам, которые вы пытаетесь создать. Есть ли у этого пользователя права на создание папок в этом каталоге? Какие данные вы записываете на диск? Можете ли вы использовать независимый от платформы механизм, ориентированный на пользователя, например Java Настройки или, возможно:

System.getProperty("user.home") -or- System.getProperty("java.io.tmpdir")?

person Amir Afghani    schedule 07.04.2011
comment
Подробности смотрите в комментарии выше. - person javydreamercsw; 08.04.2011

Вам нужно либо создать необходимые папки как часть процесса установки, либо ограничить ввод-вывод папками, к которым у вас есть доступ (домашняя папка пользователя и временная папка). Обратите внимание, что в Linux есть стандартные места, куда следует помещать множество папок, и что администраторы будут неодобрительно относиться к приложениям, которые не соответствуют этим стандартам.

Можете ли вы сказать, какие файлы/папки вам нужны для какой цели?

Похоже, причиной проблемы является разница в разделителе пути между Windows и Linux. В Linux вы должны использовать обычные косые черты. В ошибке указан путь:

/home/javier\marauroa.trace.db

Поскольку \ является не разделителем пути, а escape-символом, он пытается создать файл в папке /home, где у него нет разрешений.

Путь должен быть:

/home/javier/marauroa.trace.db

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

/home/javier/.yourappname/marauroa.trace.db

Это то, что делают многие приложения Unix и скрывают это в обычных списках файлов. Чтобы получить разделитель пути для системы, в которой работает ваше приложение, вы можете использовать следующее статическое поле:

java.io.File.seperator
person Eelke    schedule 07.04.2011
comment
Думаю, что я работаю над пользователем домой. Я могу создать некоторые папки, но когда я пытаюсь запустить java-приложение (используя ProcessBuilder), которому необходимо создать некоторые папки, я получаю исключение из разрешений. - person javydreamercsw; 08.04.2011
comment
Можете ли вы предоставить более подробную информацию, например, сообщения об ошибках и код, вызывающий их? - person Eelke; 08.04.2011
comment
Что я помню, так это то, что приложение пытается создать файл журнала (Log 4 J) во время запуска и терпит неудачу. - person javydreamercsw; 08.04.2011
comment
Хм, странно, потому что у меня есть подпапка приложения с именем .Marauroa-Server-Manager. Перед попыткой запустить приложение (используя ProcessBuilder) я установил путь для сборщика: System.getProperty(user.home)+ System.getProperty(file.separator) + .Marauroa-Server-Manager+ System.getProperty(file.separator )+ Applications + System.getProperty(file.separator) + getName()+ System.getProperty(file.separator) Что-то вроде: home/javier/.Marauroa-Server-Manager/Applications/Test/ - person javydreamercsw; 08.04.2011
comment
marauroa.trace.db создается базой данных H2. По какой-то причине он использует неправильную обратную косую черту, я думаю. - person javydreamercsw; 08.04.2011
comment
В Windows все работает в папке приложения, включая файлы базы данных. - person javydreamercsw; 08.04.2011