Pregunta

Estoy trabajando en un proyecto en netbeans que requiere que el proyecto en ejecución tenga privilegios de root.

Me gustaría que cada vez que presione "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 root, lo que se puede hacer 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 tampoco es ideal.

Creo que esto es posible alterando el archivo build.xml de este proyecto, pero tengo problemas para descubrir cómo hacerlo.

Después de investigar un poco, parecería que esta es 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.

¿Fue útil?

Solución

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

Segundo, agregue 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 puede ajustar, pero esto debería ser suficiente para comenzar.

Otros consejos

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

Un consejo muy tonto: cree una nueva aplicación Ruby, colóquela cerca de su proyecto de Java y coloque lo siguiente en 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)

Establezca el proyecto ruby ??en proyecto principal.

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

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

Por cierto: esta solución necesita instalar el complemento Ruby on Rails en NetBeans. El script no sale mientras se está ejecutando su programa Java.

Importante : ¡este script asume que se ejecuta bajo un sistema operativo compatible con Unix (donde una ruta absoluta comienza con '/')!

ejecutar Netbeans por usuario super

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top