Заставить netbeans запустить мой проект с помощью sudo?
Вопрос
Я работаю над проектом в netbeans, который требует, чтобы запущенный проект имел права суперпользователя.
Я бы хотел, чтобы каждый раз, когда я нажимаю "Запустить проект" (F6), мой проект запускался от имени root, то есть с эквивалентом "gksudo javac Main", поскольку у него есть графический интерфейс.
Одним из вариантов является запуск netbeans с правами root, что легко сделать, отредактировав ярлык "gksudo netbeans".Но поскольку у меня есть несколько проектов в netbeans, это означало, что для каждого проекта я должен запускать netbeans с правами root, это не то, что я хочу.
Другой вариант, конечно, - просто запустить мой проект из командной строки, но это тоже не идеально.
Я думаю, что это возможно, изменив этот файл projects build.xml, но мне трудно понять, как это сделать.
После некоторых исследований может показаться, что это скорее вопрос Apache Ant, у меня есть доступ к build.xml который я могу изменить, поэтому мне нужно знать, как заставить Ant запустить мой проект с помощью sudo / gksudo.Однако я не могу понять, как это сделать и возможно ли это.
Решение
Предполагая, что это "Java SE" проект (в отличие, скажем, от веб-приложения или программы Ruby). Во-первых, отключите компиляцию при сохранении в разделе «Компиляция» в свойствах проекта.
Во-вторых, добавьте в build.xml
:
<target name="-init-macrodef-java">
<macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1">
<attribute default="${main.class}" name="classname"/>
<attribute default="${run.classpath}" name="classpath"/>
<element name="customize" optional="true"/>
<sequential>
<exec executable="gksudo" failonerror="true">
<arg value="--"/>
<arg value="java"/>
<arg value="-classpath"/>
<arg path="@{classpath}"/>
<arg line="${run.jvmargs}"/>
<arg value="@{classname}"/>
</exec>
</sequential>
</macrodef>
</target>
Есть и другие вещи, которые вы можете настроить, но этого должно быть достаточно, чтобы начать работу.
Другие советы
Почему вместо «sudo java Main» вместо gksudo? В любом случае вы можете просто настроить файл sudoers (в / etc) так, чтобы он не требовал ввода пароля от вашего пользователя, и вам будет хорошо.
Очень глупый совет:создайте новое приложение Ruby, поместите его рядом с вашим java-проектом и поместите следующее в main.rb
PROJECT_DIR = "MyJavaApp"
# These must be relative to java project's dir or absolute paths
CLASSPATH = %w[dist/lib/*.jar /usr/share/some/other/lib.jar]
SUDO_BIN = "gksudo"
# Append your app's jar file into cp!
MAIN_CLASS = "com.andrew.myapp.Main"
# Put your own opts here (-Xmx, -Xms, etc)
JVM_OPTS = "-client"
###############################################
# Calculating project's root. 1st dir is a root of Ruby project, second is a common root
projroot = File.expand_path(File.dirname(__FILE__) + "/../.."
java_args = JVM_OPTS
cp = []
# It uses globbing to expand *.jar style stuffs
CLASSPATH.each do |path|
cp += path.start_with?("/") ? Dir[path] : Dir[File.join(projroot, PROJECT_DIR, path)]
end
java_args += "-classpath " + cp.join(File::PATH_SEPARATOR) + " "
# The heart of our work...
system(SUDO_BIN + " java " + java_args + " " + MAIN_CLASS)
Установите для проекта ruby значение main project.
Я не пробовал, но там, должно быть, только опечатки.
Я знаю, это не лучшее решение, но NB запускает java-проекты внутренне и, похоже, не предоставляет опции конфигурации для этого.
Кстати:для этого решения необходимо установить плагин Ruby on Rails в NetBeans.Скрипт не завершается, пока ваша java-программа запущена.
Важный:этот скрипт предполагает, что он работает под управлением Unix-совместимой ОС (где абсолютный путь начинается с '/')!
запуск NetBeans от пользователя super