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