让netbeans用sudo运行我的项目?

时间:2009-11-30 21:19:50

标签: java netbeans ant sudo gksudo

我正在开发一个netbeans项目,要求正在运行的项目具有root权限。

我希望每次按“运行项目”(F6)时,我的项目都以root身份运行,所以使用相当于“gksudo javac Main”,因为它有一个GUI。

一种选择是使用root权限启动netbeans,通过编辑“gksudo netbeans”的快捷方式可以轻松完成。但由于我在netbeans中有多个项目,这意味着对于每个项目,我必须运行具有root权限的netbeans,这不是我想要的。

另一个选择当然是简单地从shell运行我的项目,但这也不理想。

我认为这可以通过改变这个项目build.xml文件来实现,但是我很难搞清楚如何。

经过一些研究,似乎这是一个Apache Ant问题,我可以访问build.xml,我可以修改,所以我需要知道如何让Ant用sudo / gksudo运行我的项目。但是,我无法弄清楚如何做到这一点或是否有可能。

4 个答案:

答案 0 :(得分:3)

假设这是一个“Java SE”项目(而不是Web应用程序或Ruby程序)。首先,在项目属性中的编译下关闭“保存时编译”。

其次,添加到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>

还有其他一些你可以微调的东西,但这应该足以让你开始。

答案 1 :(得分:0)

为什么选择gksudo而不仅仅是'sudo java Main'?在任何一种情况下,您都可以将sudoers文件(在/ etc中)设置为不需要用户输入密码,您应该好好去。

答案 2 :(得分:0)

一个非常愚蠢的提示:创建新的Ruby应用程序,将它放在你的java项目附近,并将以下内容放到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)

将ruby项目设置为主项目。

我没有尝试过,但必须只有错别字。

我知道,这不是最好的解决方案,但NB在内部启动java项目,似乎没有提供配置选项来执行此操作。

Btw:这个解决方案需要将Ruby on Rails插件安装到NetBeans中。当您的Java程序运行时,脚本不会退出。

重要:此脚本假定它在Unix兼容的操作系统下运行(绝对路径以'/'开头)!

答案 3 :(得分:-2)

按用户超级运行Netbeans