Java类无法获取使用IKVM编译的JAR文件中的资源

时间:2011-10-05 19:28:15

标签: .net embedded-resource ikvm

我已经使用ikvmc成功转换了一个java库。 Java库在其自己的jar文件中使用一些资源。我可以访问这个java库的所有类,但是如果我调用一个调用this.getClass()。getResource()的方法,它就不会在程序集中的这些资源或程序集中的jar文件中搜索。但是如果我将这些资源放到与程序集相同的文件夹中,它就可以找到资源。但它并不是每次都能很好地运作。例如,如果我在网站项目(mvc)中引用了程序集,则无法找到资源。我试图将这些资源放到bin文件夹,根文件夹,视图的文件夹等等。(参见我对这篇文章的评论)

所以我需要永久的解决方案。 java库是一个开源项目。但我不想改变消息来源。因为编译项目需要eclipse,ant,3rd party libs等。另外在java库的下一个版本中,我将不得不更改代码并编译它。

我看到了ikvmc的“资源”参数。但我找不到文档或示例。

现在我将尝试实现一个从调用getResource方法的java类派生的.net类。然后我将覆盖调用getResource方法的方法。但这也不是一个永久的解决方案。

1 个答案:

答案 0 :(得分:3)

我找到了解决方案。其实我发现我做错了。首先我像这样转换了java库:


    ikvmc first.jar -target:library -out:main.library.dll
    ikvmc second.jar -target:library -out:second.dll -r:main.library.dll
    ikvmc third.jar -target:library -out:third.dll -r:main.library.dll

然后我将所有这些dll与ILMerge合并。问题不在于合并dll。问题在于加载resorces。加载器功能在主库中。第二个和第三个库使用主库中的这个加载器功能。因此,loader函数仅搜索其first.jar的jar文件。它不搜索其他罐子,即使它们都在同一个合并的dll中。所以我改变了我的转换脚本:


    ikvmc first.jar -target:library -out:merged.library.dll -sharedclassloader { second.jar } { third.jar }

所以,所有的罐子都与这一行命令合并。虽然我不再需要使用ILMerge了。在ikvmc帮助页面中没有关于“sharedclassloader”的任何解释。我在this page中找到了这个解释。