Java 9 có vòng lặp đọc-eval-in cho Java, được gọi là jshell
. Tôi đã nhìn thấy nó hoạt động ở chế độ cơ bản của nó, từ dòng lệnh. Nó cũng có thể được sử dụng trong một quá trình từ xa? Nói cách khác, tôi có thể kết nối với một quá trình Java khác và nhập các đoạn mã để chạy trong thời gian chạy đó không? Đây sẽ là một cách hay để thay đổi trạng thái cấu hình trong máy chủ ứng dụng mà không cần phải viết công cụ quản trị với giao diện người dùng.Java 9 jshell có thể được sử dụng để chạy mã trong một JVM khác không?
Trả lời
Câu trả lời đơn giản là không, không có cách nào để đính kèm jshell vào tiến trình Java đang chạy. jshell là một ứng dụng độc lập chạy trong JVM của riêng nó.
vâng, tất cả chúng ta đều biết điều đó, nhưng liệu nó có khả thi không? trong một bản phát hành trong tương lai hoặc bất kỳ kế hoạch để có điều này ở tất cả? đây là những gì tôi mong đợi từ một câu trả lời ... – Eugene
Rõ ràng, chúng ta không biết tất cả, đó là lý do tại sao câu hỏi được hỏi. Tôi trả lời chính xác những gì được hỏi. – Speakjava
Không có cách nào chính thức để làm như vậy.
Tuy nhiên, không khó để giải mã lại mã và chạy nó trên một máy ảo khác thông qua tác nhân Java. Tuy nhiên, điều này sẽ không hoạt động tốt như bạn mong đợi vì nó không rõ trình nạp lớp nào nên sử dụng và cách nó nên tương tác với chương trình đang chạy.
Trả lời https://stackoverflow.com/a/48132747/1561345 bao gồm
giải pháp hacky và
đề xuất, giải pháp sạch sẽ là gì.
Phần của câu trả lời khác cho thấy rằng JShell chỉ chạy mã trong VM của nó là sai - JShell khởi chạy một JVM riêng biệt với việc vận chuyển qua JDI theo mặc định (ít nhất là trên Linux). Nhưng vâng, tôi không biết một cách chính thức làm thế nào để làm điều đó.
- 1. Làm thế nào để xóa Java 9 JShell Console?
- 2. Có thể cho một quá trình java trong một jvm để giết/dừng một quá trình java khác trong jvm?
- 3. Làm cách nào để chạy tệp JShell?
- 4. Có thể đăng nhập nếu một lớp trong JVM được sử dụng không?
- 5. Có thể sử dụng phụ thuộc mà không cần đun-info.class trong một module Java 9
- 6. Cầu cảng chạy trên 1.6 JVM không thể chạy webapp được biên dịch trên Java 1.6
- 7. Xem classpath trong jshell
- 8. Java không có JVM
- 9. JVM OpenJDK có giống JVM Java Java SE không?
- 10. Làm thế nào để chạy mã bytecode scala trên jvm?
- 11. Thoát jshell với mã lỗi
- 12. Cách đúng để sử dụng VarHandle trong Java 9?
- 13. Java: Có phải "9" xuất hiện trong khi chạy một lỗi Eclipse của tôi không?
- 14. NOP trong bytecode JVM được sử dụng cho là gì?
- 15. Có thể biên dịch các tệp lớp với SDK Java 7 có thể chạy trên Java 6 JVM không?
- 16. Cách sử dụng gói sun.reflect trong jdk9/java-9?
- 17. JVM Android có thể chạy trên PC không?
- 18. Có thể thực thi chuỗi mã Java khi chạy trong Android không?
- 19. java có thể chạy mã scala đã biên dịch không?
- 20. CLR/JVM có giữ một hồ bơi đơn cho tất cả các ứng dụng .net/java đang chạy không?
- 21. Ứng dụng không thể được xác minh trên ios 9
- 22. Tôi có thể nhận các mã lỗi khi sử dụng các lệnh Fabric để chạy() trong một remote shell không?
- 23. Có thể buộc một ứng dụng Java hiện có sử dụng không quá x lõi không?
- 24. Lỗi khi khởi chạy Android Studio: Không thể tạo JVM: mã lỗi-6
- 25. Có cách nào để sử dụng tham chiếu phương thức cho các hàm cấp cao nhất trong jshell không?
- 26. Làm thế nào để thực hiện một kịch bản java với jshell?
- 27. Java 9 - REST với Spring 5 & Jigsaw - Có thể không?
- 28. Java/Eclipse: "biểu thức Lambda có thể không được sử dụng trong một biểu đánh giá"
- 29. java 9 có thể chạy trên hệ điều hành 32 bit không?
- 30. Có thể nhận được id thực sự duy nhất cho một cá thể JVM cụ thể không?
đó là một câu hỏi tuyệt vời! – Eugene
Tôi thực sự thích câu hỏi này; bởi vì đó thực sự là những gì tôi mong đợi. Sự hiểu biết của tôi là * clojure * ví dụ chính xác hỗ trợ điều này. Một REPL hoạt động trong * JVM * riêng của nó, trông giống như * lame * – GhostCat