Ottieni netbeans per eseguire il mio progetto con sudo?
Domanda
Sto lavorando a un progetto in netbeans che richiede che il progetto in esecuzione abbia i privilegi di root.
Vorrei che ogni volta che premessi " Esegui progetto " (F6) il mio progetto viene eseguito come root, quindi con l'equivalente di " gksudo javac Main " ;, poiché ha una GUI.
Un'opzione è quella di avviare netbeans con i privilegi di root, facilmente modificando il collegamento in "gksudo netbeans". Ma poiché ho più progetti in netbeans, ciò significa che per ogni progetto devo eseguire netbeans con i privilegi di root, non è quello che voglio.
Un'altra opzione, ovviamente, è semplicemente eseguire il mio progetto dalla shell, ma neanche questo è l'ideale.
Penso che ciò sia possibile modificando questo file build.xml di progetti, ma ho difficoltà a capire come.
Dopo alcune ricerche sembrerebbe che si tratti piuttosto di una domanda su Apache Ant, ho accesso a build.xml che posso modificare, quindi devo sapere come far funzionare Ant con il mio progetto con sudo / gksudo. Tuttavia, non riesco a capire come farlo o se è possibile.
Soluzione
Supponendo che questo sia un "Java SE" progetto (al contrario, diciamo, di un'app web o di un programma Ruby). Innanzitutto, disattiva Compila su Salva sotto Compilazione nelle proprietà del progetto.
In secondo luogo, aggiungi 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>
Ci sono altre cose che puoi mettere a punto, ma questo dovrebbe essere sufficiente per iniziare.
Altri suggerimenti
Perché gksudo invece di 'sudo java Main'? In entrambi i casi, puoi semplicemente impostare il tuo file sudoers (in / etc) per non richiedere una password al tuo utente e dovresti essere pronto per andare.
Un suggerimento molto stupido: crea una nuova applicazione Ruby, mettila vicino al tuo progetto Java e metti quanto segue in 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)
Imposta il progetto ruby ??sul progetto principale.
Non l'ho provato, ma ci devono essere solo errori di battitura.
Lo so, questa non è la soluzione migliore, ma NB avvia i progetti Java internamente e sembra non fornire un'opzione di configurazione per farlo.
A proposito: questa soluzione richiede l'installazione del plug-in Ruby on Rails in NetBeans. Lo script non si chiude mentre il programma java è in esecuzione.
Importante : questo script presuppone che venga eseguito con un sistema operativo compatibile con Unix (dove un percorso assoluto inizia con '/')!
esegui Netbeans dall'utente super