Làm cách nào để tôi có thể bắt đầu một nền tảng quy trình Java thứ hai độc lập? Lý tưởng nhất nó phải là phiên bản Java hiện đang chạy. Có bất kỳ thuộc tính hệ thống hữu ích nào không?Tôi làm cách nào để bắt đầu quá trình Java thứ hai?
Trả lời
Không thể nói chung.
Công thức được cung cấp trong câu trả lời của @ khachik sẽ không nhất thiết phải làm việc cho việc triển khai Java không phải của Sun.
Các java thực thi không nhất thiết phải gọi
java
và không nhất thiết sống trongbin
thư mục con. Ngay cả với Sun Java, trên Windows có hai thực thi;java
vàjavaw
.Tùy chọn lệnh cho lệnh khởi động JVM khác nhau đối với các triển khai Java khác nhau. Vì vậy, các bước
ProcessBuilder
có thể liên quan đến các đối số không di động.
Trong khi hầu hết các JVM đã áp dụng Sun java
tùy chọn lệnh tiểu học, có rất nhiều sự khác biệt. Ví dụ:
- IBM J9 sử dụng
j9
vàj9w
làm tên thực thi. - BEA/Oracle JRockit có các tùy chọn
-X
và-XX
khác nhau. - Jikes RVM sử dụng
rvm
làm tên thực thi và chỉ hỗ trợ một tập hợp con của Sunjava
tùy chọn. - IKVM sử dụng
ikvm
làm tên thực thi.
(Lưu ý: đây chỉ là ví dụ mà nổi bật trong việc đọc lướt qua các tài liệu trực tuyến tương ứng.)
Bạn có thể sử dụng java.home
sở hữu hệ thống để tìm ra JVM hiện tại:
String jvm = new java.io.File(new java.io.File(System.getProperty("java.home"),
"bin"),
"java").getAbsolutePath();
và sau đó chạy nó bằng cách sử ProcessBuilder
(hoặc Runtime.exec
).
Lưu ý rằng đối với JDK java.home
điểm vào thư mục JRE được bao gồm trong JDK.
Bạn đã cố gắng sử dụng các libs Apache Commons? Nếu bạn không cung cấp cho thử nghiệm launcher project. Nó khá hữu ích đối với tôi một thời gian trước đây.
Dưới đây là mô tả dự án từ trang web của họ:
Hợp phần Launcher được thiết kế để trở thành một nền tảng chéo ứng dụng Java launcher.
Các lớp Java ban đầu đến từ dự án Tomcat 4.0.
Trình khởi chạy Commons giúp loại bỏ sự cần thiết của tập lệnh bó hoặc trình bao để khởi chạy một lớp Java.Một số trường hợp có thể muốn loại bỏ tập lệnh bó hoặc tập lệnh có thể được mong muốn là:
- Bạn muốn tránh phải xác định nơi một số đường dẫn ứng dụng nhất định, ví dụ: thư mục chính của ứng dụng của bạn, v.v. Xác định điều này một cách năng động trong các kịch bản lệnh Windows rất khó khăn trên một số phiên bản của Windows hoặc khi các liên kết mềm được sử dụng trên các nền tảng Unix.
- Bạn muốn tránh phải xử lý tệp gốc và dấu tách đường dẫn hoặc các vấn đề trích dẫn đường dẫn gốc.
- Bạn cần thực thi một số thuộc tính hệ thống nhất định, ví dụ: java.endorsed.dirs khi chạy với JDK 1.4.
- Bạn muốn cho phép người dùng chuyển vào đối số JVM tùy chỉnh hoặc thuộc tính hệ thống mà không phải phân tích cú pháp và sắp xếp lại các đối số trong tập lệnh của bạn. Điều này có thể phức tạp và/hoặc lộn xộn trong hàng loạt và kịch bản shell. Bạn muốn khởi động các thuộc tính hệ thống từ tệp cấu hình thay vì mã hóa chúng trong các kịch bản lệnh shell và batch của bạn.
- Bạn muốn cung cấp các thông báo lỗi được bản địa hoá rất phức tạp để thực hiện theo lô và kịch bản lệnh shell.
Nếu tôi hiểu nó sau đó nó không giúp đỡ để bắt đầu một quá trình Java khác bất kỳ quá trình bên ngoài, nơi tôi biết thực thi. Nhưng đây là vấn đề. Tôi không biết thực thi hiện tại. – Horcrux7
Bất kỳ liên kết nào để hỗ trợ khiếu nại đầu tiên của bạn? –