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

4

4 回答 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>

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

于 2009-12-03T14:34:56.407 回答
0

为什么使用 gksudo 而不是 'sudo java Main'?在任何一种情况下,您都可以将您的 sudoers 文件(在 /etc 中)设置为不需要您的用户提供密码,您应该一切顺利。

于 2009-11-30T21:26:02.353 回答
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 项目,似乎没有提供配置选项来执行此操作。

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

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

于 2009-12-01T23:25:45.587 回答
-2

由用户 super 运行 Netbeans

于 2009-12-01T14:38:44.767 回答