所以我需要永久的解决方案。 java库是一个开源项目。但我不想改变消息来源。因为编译项目需要eclipse,ant,3rd party libs等。另外在java库的下一个版本中,我将不得不更改代码并编译它。
我看到了ikvmc的“资源”参数。但我找不到文档或示例。
现在我将尝试实现一个从调用getResource方法的java类派生的.net类。然后我将覆盖调用getResource方法的方法。但这也不是一个永久的解决方案。
答案 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中找到了这个解释。