2009-11-30 4 views
6

Я работаю над проектом в netbeans, который требует, чтобы запущенный проект имел права root.Получите netbeans для запуска моего проекта с помощью sudo?

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

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

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

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

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

+1

у вас должна быть возможность изменить запись в командной строке, используемую для запуска основного проекта. Нет? –

+0

Нет, насколько я вижу в «Свойствах проекта» netbeans позволяет мне добавлять аргументы, рабочий каталог и параметры виртуальной машины, но ничего, что было бы до «java» в командной строке. –

ответ

3

Предполагая, что это проект «Java SE» (в отличие от, скажем, веб-приложения или программы Ruby). Во-первых, отключите компиляцию в Save при компиляции в свойствах проекта.

Во-вторых, добавить к 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

Спасибо, это именно то, что я хотел! Отлично –

0

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

+0

Довольно уверен, что если он использовал gksudo, ему не нужно было бы настраивать sudo на работу без пароля. – MitMaro

-2

пробег Netbeans пользователя супер

+0

...это именно то, о чем упомянул этот вопрос, и объяснил, почему он не может его использовать. –

0

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

Установите проект рубинового к основному проекту.

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

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

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

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

Смежные вопросы