Tôi không tìm câu trả lời thông thường như dịch vụ web. Tôi đang tìm một giải pháp ánh sáng để chạy trong cùng một máy.Tôi có thể gọi mã .NET từ Java bằng cách nào?
Chỉnh sửa: Tôi đang tìm cách trong Java để gọi các phương thức .NET
Tôi không tìm câu trả lời thông thường như dịch vụ web. Tôi đang tìm một giải pháp ánh sáng để chạy trong cùng một máy.Tôi có thể gọi mã .NET từ Java bằng cách nào?
Chỉnh sửa: Tôi đang tìm cách trong Java để gọi các phương thức .NET
Tôi tin rằng Java có thể nói chuyện với COM và .NET có thể phơi bày giao diện COM. Vì vậy, đó có thể là một giải pháp trọng lượng rất nhẹ mà không yêu cầu bất kỳ bên thứ 3. Ngoài ra còn có tùy chọn sử dụng ổ cắm để giao tiếp giữa các chương trình mà sẽ không yêu cầu một thể hiện nặng của IIS được cài đặt trên máy.
Bạn đã xem IKVM chưa?
Tôi đang tìm Java để gọi .Net methods –
Bạn có thể chạy mã Java trong IKVM mặc dù - đó là điểm. Nếu bạn thực sự muốn chạy một JVM "bình thường", hãy xem dự án Eclipse và cách chúng tích hợp WPF - có cả JVM và CLR đang chạy trong cùng một tiến trình, tôi tin. Nó có thể là khá lộn xộn mặc dù. –
Xin lỗi bạn đã đúng. IKVM sẽ hoạt động. –
Bạn đã xem giao diện bản địa Java chưa?
Điều tôi đã làm trước đây là viết một thư viện C, có thể gọi từ cả Java và .NET (và cả ngôn ngữ kịch bản lệnh COM, NSIS và các công nghệ khác).
JNI sẽ hoạt động tốt nếu bạn chỉ muốn hiển thị một vài phương pháp, nhưng có thể khó sử dụng nếu bạn muốn, ví dụ, hiển thị toàn bộ khuôn khổ .NET vì số lượng tệp tiêu đề và phương thức trình bao bọc bạn sẽ cần phải tạo.
Thật là dễ dàng để làm cho những sai lầm xấu xa trên JNI, nhưng nó chắc chắn là một giải pháp khả thi. Và miễn là JNI định nghĩa một số cây cầu đơn giản, không có gì quá xấu nên xảy ra –
Dễ dàng là một cách nói dối !! Với cây cầu NSIS nơi các đối số được truyền vào trong một cấu trúc ngăn xếp (như tôi nhớ lại), chúng tôi đã có được một số rò rỉ bộ nhớ đáng yêu! –
Chúng tôi đã thử IKVM trong môi trường sản xuất nhưng nó vẫn bị treo. Chúng tôi sử dụng JNBridge là một sản phẩm thương mại nhưng rất ổn định và hoạt động tốt trong môi trường ASP.NET của chúng tôi.
Tôi là tác giả của jni4net, cầu nối giữa các nguồn mở giữa JVM và CLR. Nó được xây dựng trên đầu trang của JNI và PInvoke. Không cần mã C/C++. Tôi hy vọng nó sẽ giúp bạn.
Nếu bạn sẵn sàng chạy mã Java của mình trong .NET (hoặc Mono), bạn có thể thực hiện việc này bằng cách sử dụng IKVM.
Bởi vì (theo như tôi biết) các trình biên dịch Java hiện tại không đọc các assembly .NET, có 2 bước. Trước tiên, bạn cần phải generate a stub JAR chứa các lớp và phương thức giả với chữ ký của hội đồng .NET mà bạn muốn sử dụng, để javac
(hoặc IDE của bạn) biết phương thức nào có sẵn. Ví dụ, nếu bạn muốn sử dụng một cái gì đó trong thư viện chuẩn NET chính từ Java, chạy
ikvmstub mscorlib
mà tạo stub mscorlib.jar
. (Nó tìm thấy việc lắp ráp Mono mscorlib.dll
cho tôi tự động trong Linux, nhưng nếu nó không thành công, bạn có thể phải cung cấp đường dẫn đầy đủ đến DLL.)
Sau đó bạn có thể viết một tệp Java sử dụng nó, ví dụ: (based on the example from the IKVM documentation):
import cli.System.IO.Directory;
public class IKVMTest {
public static void main(String[] args) {
for(String file : Directory.GetFiles(".")) // From .NET standard library
System.out.println(file); // From Java standard library
}
}
Lưu ý rằng packges CLI được bắt đầu với cli.
, do đó việc nhập khẩu cli.System
thay vì chỉ System
.
Để biên dịch, bao gồm JAR còn sơ khai trên classpath:
javac -classpath mscorlib.jar IKVMTest.java
Kể từ Java liên kết xảy ra khi chạy, các tập tin đầu ra class
sử dụng các phương pháp của tên và chữ ký mong muốn, nhưng bạn có thể trao đổi trên các giả phương pháp sơ khai với thực tế.Các phương thức NET khi chạy dưới IKVM:
ikvm IKVMTest
và nó sẽ in các tệp trong thư mục hiện tại bằng cách gọi phương thức .NET.
Chính xác. jacob.dll + jacob.jar –
Tôi có thể hỏi COM là gì trong trường hợp này? – Xitrum
@Xitrum Component Object Model - tiêu chuẩn của MS trên nền tảng Windows để tái sử dụng mã ở cấp nhị phân. Cá nhân, tôi nghĩ rằng đó là một công nghệ hấp dẫn. – smwikipedia