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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top