2009-11-30 35 views
6

Tôi đang làm việc trên một dự án trong netbeans đòi hỏi các dự án đang chạy để có quyền root.Nhận netbeans để chạy dự án của tôi với sudo?

Tôi muốn nó để mỗi lần tôi đẩy "Chạy dự án" (F6) dự án của tôi được chạy dưới dạng gốc, vì vậy với tương đương với "gksudo javac Main", vì nó có GUI.

Một tùy chọn là bắt đầu netbeans với đặc quyền root, dễ dàng thực hiện bằng cách chỉnh sửa phím tắt thành "gksudo netbeans". Nhưng khi tôi có nhiều dự án trong netbeans, điều này có nghĩa là đối với mỗi dự án tôi phải chạy netbeans với quyền root, đây không phải là những gì tôi muốn.

Một tùy chọn khác, tất nhiên, chỉ đơn giản là chạy dự án của tôi từ trình bao, nhưng điều này cũng không lý tưởng.

Tôi nghĩ rằng điều này là có thể bằng cách thay đổi tệp build.xml dự án này nhưng gặp sự cố khi tìm hiểu cách thực hiện. Sau khi một số nghiên cứu có vẻ như đây là một câu hỏi Apache Ant, tôi có quyền truy cập build.xml mà tôi có thể sửa đổi vì vậy tôi cần biết cách để Ant chạy dự án của tôi với sudo/gksudo. Tuy nhiên, tôi không thể tìm ra cách để làm điều này hoặc nếu có thể.

+1

bạn phải có tùy chọn để thay đổi mục nhập dòng lệnh được sử dụng để bắt đầu dự án chính của bạn. Không? –

+0

Không, theo như tôi có thể thấy trong "Thuộc tính dự án" netbeans cho phép tôi thêm đối số, một thư mục làm việc và VM tùy chọn nhưng không có gì mà sẽ được trước khi "java" trên dòng lệnh. –

Trả lời

3

Giả sử đây là dự án "Java SE" (trái ngược với, ví dụ: ứng dụng web hoặc chương trình Ruby). Đầu tiên, tắt Compile on Save trong Compiling trong thuộc tính của project.

Thứ hai, thêm vào 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> 

Có những điều khác mà bạn có thể tinh chỉnh nhưng điều này nên là đủ để giúp bạn bắt đầu.

+0

Thankyou, đó là chính xác những gì tôi muốn! Hoàn hảo –

0

Tại sao gksudo thay vì chỉ 'sudo java Main'? Trong cả hai trường hợp, bạn chỉ có thể đặt tệp sudoers của bạn (trong/etc) để không yêu cầu mật khẩu từ người dùng của bạn và bạn nên làm tốt.

+0

Khá chắc chắn nếu anh ta sử dụng gksudo anh ta sẽ không phải thiết lập sudo để làm việc mà không có mật khẩu. – MitMaro

-2

Netbeans chạy bởi người sử dụng siêu

+0

...đó là chính xác những gì các querent đề cập, và giải thích lý do tại sao ông không thể sử dụng nó. –

0

Một mẹo rất ngớ ngẩn: tạo ra ứng dụng Ruby mới, đặt nó gần dự án java của bạn, và đặt sau để 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) 

Đặt dự án ruby cho dự án chính.

Tôi đã không dùng thử, nhưng chỉ có lỗi chính tả.

Tôi biết, đây không phải là giải pháp tốt nhất, nhưng NB bắt đầu các dự án java nội bộ và dường như không cung cấp tùy chọn cấu hình để thực hiện.

Btw: giải pháp này cần cài đặt plugin Ruby on Rails vào NetBeans. Tập lệnh không thoát khi chương trình java của bạn đang chạy.

Quan trọng: tập lệnh này giả định nó chạy trong hệ điều hành tương thích với Unix (trong đó đường dẫn tuyệt đối bắt đầu bằng '/')!

Các vấn đề liên quan