Заставить netbeans запустить мой проект с помощью sudo?

StackOverflow https://stackoverflow.com/questions/1822467

Вопрос

Я работаю над проектом в 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top