Получить netbeans для запуска моего проекта с помощью sudo? - PullRequest
6 голосов
/ 01 декабря 2009

Я работаю над проектом в NetBeans, который требует, чтобы у запущенного проекта были права root.

Мне бы хотелось, чтобы каждый раз, когда я нажимал «Запустить проект» (F6), мой проект запускался от имени пользователя root, то есть с эквивалентом «gksudo javac Main», поскольку он имеет графический интерфейс пользователя.

Одним из вариантов является запуск сетевых компонентов с правами root, что легко сделать, отредактировав ярлык "gksudo netbeans". Но поскольку у меня есть несколько проектов в NetBeans, это означает, что для каждого проекта я должен запускать NetBeans с привилегиями root, это не то, что я хочу.

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

Я думаю, что это возможно, изменив файл build.xml этого проекта, но у меня возникли проблемы с выяснением, как это сделать.

После некоторых исследований может показаться, что это скорее вопрос Apache Ant, у меня есть доступ к build.xml, который я могу изменить, поэтому мне нужно знать, как заставить Ant запускать мой проект с помощью sudo / gksudo. Однако я не могу понять, как это сделать или возможно ли это.

Ответы [ 4 ]

3 голосов
/ 03 декабря 2009

Предполагается, что это проект "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>

Есть и другие вещи, которые вы можете настроить, но этого должно быть достаточно, чтобы начать работу.

0 голосов
/ 01 декабря 2009

запуск Netbeans пользователем super

0 голосов
/ 02 декабря 2009

Очень тупой совет: создайте новое приложение 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 ​​в основной проект.

Я не пробовал, но должны быть только опечатки.

Я знаю, что это не лучшее решение, но NB запускает проекты Java изнутри и, похоже, не предоставляет возможности конфигурации для этого.

Кстати: это решение требует установки плагина Ruby on Rails в NetBeans. Скрипт не завершается во время работы вашей Java-программы.

Важно : предполагается, что этот скрипт выполняется в Unix-совместимой ОС (где абсолютный путь начинается с '/')!

0 голосов
/ 01 декабря 2009

Почему гксудо вместо просто "sudo java Main"? В любом случае вы можете просто настроить файл sudoers (в / etc) так, чтобы он не требовал ввода пароля от вашего пользователя, и вам будет хорошо.

...