2009-11-30 15 views
6

Estoy trabajando en un proyecto en netbeans que requiere que el proyecto en ejecución tenga privilegios de administrador.Obtener netbeans para ejecutar mi proyecto con sudo?

Me gustaría que cada vez que presiono "Ejecutar proyecto" (F6) mi proyecto se ejecuta como root, por lo que con el equivalente de "gksudo javac Main", ya que tiene una GUI.

Una opción es iniciar netbeans con privilegios de administrador, fácilmente editando el acceso directo a "gksudo netbeans". Pero como tengo varios proyectos en netbeans, esto significa que para cada proyecto debo ejecutar netbeans con privilegios de root, esto no es lo que quiero.

Otra opción, por supuesto, es simplemente ejecutar mi proyecto desde el shell, pero esto tampoco es ideal.

Creo que esto es posible mediante la modificación de este proyecto de archivo build.xml, pero estoy teniendo problemas para averiguar cómo.

Después de algunas investigaciones parece que es más bien una pregunta de Apache Ant, tengo acceso a build.xml que puedo modificar, así que necesito saber cómo hacer que Ant ejecute mi proyecto con sudo/gksudo. Sin embargo, no puedo entender cómo hacer esto o si es posible.

+1

debe tener la opción de cambiar la entrada de línea de comando utilizada para iniciar su proyecto principal. No ? –

+0

No, por lo que puedo ver en "Propiedades del proyecto" netbeans me permite agregar argumentos, un directorio de trabajo y opciones de VM pero nada que esté antes de la "java" en la línea de comandos. –

Respuesta

3

Suponiendo que se trata de un proyecto "Java SE" (a diferencia de, por ejemplo, una aplicación web o un programa Ruby). Primero, desactive Compilar al guardar en Compilar en propiedades del proyecto.

En segundo lugar, añadir a 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> 

Hay otras cosas que se pueden ajustar con precisión, pero esto debería ser suficiente para empezar.

+0

¡Gracias, eso es exactamente lo que quería! Perfecto –

0

¿Por qué gksudo en lugar de simplemente 'sudo java Main'? En cualquier caso, puede configurar su archivo sudoers (en/etc) para que no requiera una contraseña de su usuario y debería estar listo para continuar.

+0

Bastante seguro si usó gksudo no tendría que configurar sudo para trabajar sin una contraseña. – MitMaro

-2

Netbeans Dirigido por superusuario

+0

...que es exactamente lo que el consultante mencionó, y explicó por qué no podía usarlo. –

0

Un consejo muy tonta: Crear nueva aplicación Ruby, ponerlo cerca de su proyecto Java, y ponga el siguiente a 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) 

Establecer el proyecto de rubí al proyecto principal.

No lo intenté, pero debe haber solo errores tipográficos.

Lo sé, esta no es la mejor solución, pero NB inicia los proyectos Java internamente y parece que no proporciona una opción de configuración para hacerlo.

Por cierto: esta solución necesita instalar el plugin Ruby on Rails en NetBeans. La secuencia de comandos no se cierra mientras se ejecuta su programa Java.

Importante: esta secuencia de comandos asume que se ejecuta en un sistema operativo compatible con Unix (donde una ruta absoluta comienza con '/')!

Cuestiones relacionadas