gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:12:04 27 4
gpt4 key购买 nike

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

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

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

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

最佳答案

我找到了解决方案。其实我已经找到我做错的地方了。首先,我像这样转换了java库:

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

然后我将所有这些 dll 与 ILMerge 合并。问题不在于合并 dll。问题在于加载资源。加载器函数在主库中。第二个和第三个库使用主库中的这个加载器函数。所以加载器函数只搜索它的 jar 文件 first.jar。即使它们都在同一个合并的 dll 中,它也不会搜索其他 jar。所以我像这样改变了我的转换脚本:

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

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

关于.net - Java 类无法获取使用 IKVM 编译的 JAR 文件中的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7666613/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com