如何让NetBeans以sudo权限运行我的项目?

7
我正在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运行我的项目。但是,我无法弄清楚如何做到这一点或是否可能。

1
你必须有一个选项来更改用于启动主要项目的命令行输入。没有问号。 - Hassan Syed
据我所见,在NetBeans的“项目属性”中,它允许我添加参数、工作目录和虚拟机选项,但没有任何可以出现在命令行中"java"之前的选项。 - Andy Smith
4个回答

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>

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


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 项目,似乎没有提供配置选项来执行此操作。

顺便说一句:此解决方案需要在 NetBeans 中安装 Ruby on Rails 插件。当您的 Java 程序正在运行时,该脚本不会退出。

重要提示:此脚本假定在 Unix 兼容的操作系统下运行(其中绝对路径以“/”开头)!


0
为什么要使用gksudo而不是直接使用“sudo java Main”?无论哪种情况,您都可以在sudoers文件(位于/ etc中)中设置不需要用户密码,然后就可以继续了。

相信如果他使用gksudo,就不必设置sudo可无需密码工作。 - MitMaro

-2

以超级用户身份运行Netbeans


这正是询问者提到的,并解释了他为什么不能使用它。 - Andrzej Doyle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接