首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Winrun4j:超过最大类路径大小

Winrun4j:超过最大类路径大小
EN

Stack Overflow用户
提问于 2017-01-03 09:04:21
回答 3查看 382关注 0票数 2

我的项目有许多依赖项,我告诉winrun4j通过设置

代码语言:javascript
复制
classpath.1=D:\lib\*.jar

在ini文件里。

服务日志告诉我,winrun4j正在扩展类路径并生成类路径:

代码语言:javascript
复制
[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生成这样的类路径?难道光拿就够了吗

代码语言:javascript
复制
D:\lib\*.jar

有什么解决办法可以让服务在这么多依赖项下运行吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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。

票数 3
EN

Stack Overflow用户

发布于 2017-01-03 09:40:05

这是winrun4j特有的问题,正如您在winrun4j代码中看到的,这条消息是硬编码的,Classpath.cpp Github

代码语言:javascript
复制
// 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是从这里开始拍摄的。

正如另一个答案所指出的,由于限制是硬编码的,所以问题没有得到解决。

票数 1
EN

Stack Overflow用户

发布于 2017-01-03 09:52:03

与将所有依赖项放入libs文件夹并将它们添加到类路径中不同,您可以构建一个胖JAR,它在单个JAR文件中包含所有依赖库。

如何实现这一点在很大程度上取决于您使用的构建系统(例如gradle或maven)。或者,您可以查看一下spring,它在默认情况下适用于fat罐子。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41439856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档