2009-11-30 5 views
6

Je travaille sur un projet dans netbeans qui nécessite que le projet en cours ait les privilèges root. Je voudrais que chaque fois que je clique sur "Exécuter le projet" (F6), mon projet soit exécuté en tant que root, donc avec l'équivalent de "gksudo javac Main", car il a une interface graphique.Obtenez netbeans pour exécuter mon projet avec sudo?

Une option consiste à démarrer netbeans avec les privilèges root, facilement en éditant le raccourci vers "gksudo netbeans". Mais comme j'ai plusieurs projets dans netbeans, cela signifie que pour chaque projet je dois utiliser netbeans avec les privilèges root, ce n'est pas ce que je veux.

Une autre option, bien sûr, est simplement de lancer mon projet à partir du shell, mais ce n'est pas idéal non plus.

Je pense que c'est possible en modifiant ce projet build.xml mais j'ai du mal à comprendre comment. Après quelques recherches, il semblerait que ce soit plutôt une question Apache Ant, j'ai accès à build.xml que je peux modifier, donc j'ai besoin de savoir comment obtenir Ant pour exécuter mon projet avec sudo/gksudo. Cependant, je ne peux pas comprendre comment faire ceci ou si c'est possible.

+1

Vous devez avoir une option pour modifier l'entrée de ligne de commande utilisée pour démarrer votre projet principal. Non ? –

+0

Non, pour autant que je puisse voir dans "Propriétés du projet" netbeans me permet d'ajouter des arguments, un répertoire de travail et des options VM, mais rien qui serait avant le "java" sur la ligne de commande. –

Répondre

3

En supposant qu'il s'agit d'un projet "Java SE" (par opposition à, disons, une application Web ou un programme Ruby). Tout d'abord, désactivez Compiler dans Enregistrer sous Compilation dans les propriétés du projet.

En second lieu, ajouter à 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> 

Il y a d'autres choses que vous pouvez affiner mais cela devrait être suffisant pour vous aider à démarrer.

+0

Merci, c'est exactement ce que je voulais! Parfait –

0

Pourquoi gksudo au lieu de simplement 'sudo java Main'? Dans les deux cas, vous pouvez simplement définir votre fichier sudoers (dans/etc) pour ne pas exiger un mot de passe de votre utilisateur et vous devriez être prêt à partir.

+0

Bien sûr, s'il utilisait gksudo, il n'aurait pas besoin de configurer sudo pour fonctionner sans mot de passe. – MitMaro

-2

run Netbeans par super-utilisateur

+0

...ce qui est exactement ce que le querent a mentionné, et a expliqué pourquoi il ne pouvait pas l'utiliser. –

0

Une astuce très stupide: créer une nouvelle application Ruby, mettre près de votre projet java, et mettez de 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) 

Définir le projet ruby au projet principal.

Je ne l'ai pas essayé, mais il ne doit y avoir que des fautes de frappe.

Je sais, ce n'est pas une meilleure solution, mais NB lance des projets Java en interne et ne semble pas offrir une option de configuration pour le faire. Btw: cette solution nécessite l'installation du plugin Ruby on Rails dans NetBeans. Le script ne se ferme pas lorsque votre programme Java est en cours d'exécution.

Important: ce script suppose qu'il s'exécute sous un système d'exploitation compatible Unix (où un chemin absolu commence par '/')!

Questions connexes