我的项目有许多依赖项,我告诉winrun4j通过设置
classpath.1=D:\lib\*.jar在ini文件里。
服务日志告诉我,winrun4j正在扩展类路径并生成类路径:
[info] Expanding Classpath: D:\lib\*.jar
[info] Expanding Classpath: D:\lib\activation-1.1.1.jar
[info] Expanding Classpath: D:\lib\activemq-client-5.10.2.jar
[...]
[...]many, many other libs here
[...]
[warn] Exceeded maximum classpath size
[info] Generated Classpath: D:\lib\activation-.1.1.jar;D:\lib\activemq-client-5.10.2.jar;[...]为什么winrun4j生成这样的类路径?难道光拿就够了吗
D:\lib\*.jar有什么解决办法可以让服务在这么多依赖项下运行吗?
发布于 2017-01-03 09:21:05
这是很久以前就知道的winrun4j问题,在这里没有得到解决和讨论:
超过最大类路径长度#59
https://github.com/poidasmith/winrun4j/issues/59
在这里:
添加INI选项以禁用类路径glob扩展#67
https://github.com/poidasmith/winrun4j/issues/67
不幸的是,你没有太多的可能性。正如问题59所建议的,您可以将工作目录设置为模块目录。你可以放几个角色。
D:\lib\activation-.1.1.jar;将成为lib\activation-.1.1.jar;。您还可以检查是否需要所有依赖项。
如果还不够,您应该认真地寻找一种替代方案,如JSmooth或Launch4J。
发布于 2017-01-03 09:40:05
这是winrun4j特有的问题,正如您在winrun4j代码中看到的,这条消息是硬编码的,Classpath.cpp Github
// Check for too many results
if(*current >= max) {
if(!g_classpathMaxWarned) {
Log::Warning("Exceeded maximum classpath size");
g_classpathMaxWarned = true;
}
return;
}从代码中,我无法计算出max的确切值,但在代码基上有一些单元测试将其设置为260。
我想,这是相关问题,MAX_PATH是从这里开始拍摄的。
正如另一个答案所指出的,由于限制是硬编码的,所以问题没有得到解决。
发布于 2017-01-03 09:52:03
与将所有依赖项放入libs文件夹并将它们添加到类路径中不同,您可以构建一个胖JAR,它在单个JAR文件中包含所有依赖库。
如何实现这一点在很大程度上取决于您使用的构建系统(例如gradle或maven)。或者,您可以查看一下spring,它在默认情况下适用于fat罐子。
https://stackoverflow.com/questions/41439856
复制相似问题