Winrun4j:超过最大类路径大小

时间:2017-01-03 09:04:22

标签: java winrun4j

我的项目有很多依赖项,我告诉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

有关使用多个依赖项运行服务的变通方法的任何想法吗?

3 个答案:

答案 0 :(得分:3)

很长一段时间都是winrun4j问题,这里没有解决和讨论:

  

超过最大类路径长度#59

https://github.com/poidasmith/winrun4j/issues/59

在这里:

  

添加INI选项以禁用classpath glob expansion#67

https://github.com/poidasmith/winrun4j/issues/67

不幸的是,你的可能性不大。如问题59所示,您可以将工作目录设置为模块目录。你可以节省一些角色。

@NgModule({ imports: [ BrowserModule, TestRoutingModule, MyRoutingModule, RouterModule.forRoot( [ { path: '', component: MainComponent } ], { useHash: false }) ], declarations: [ App, MainComponent, HomeComponent, TestComponent ], bootstrap: [ App ] }) export class AppModule {} 将成为D:\lib\activation-.1.1.jar;。 您还可以检查是否需要所有依赖项。

如果还不够,你应该认真寻找替代方案,例如JSmooth或Launch4J。

答案 1 :(得分:1)

这是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来自$('button').click(function(){ $('.content').append('<div class="Box"></div>') $('.numberPage').append('<span>'+($('.numberPage span').length + 1 )+'</span>') });

正如另一个答案所指出的那样,问题没有解决,因为限制是硬编码的。

答案 2 :(得分:1)

不是将所有依赖项放入libs文件夹并将它们添加到类路径中,而是可以在单个JAR文件中构建包含所有依赖库的fat-JAR。

如何实现这一点取决于您使用的构建系统(例如gradle或maven)。或者你可以看一下spring-boot,它默认使用fat-JARs。