我正在使用 maven appassembler 创建我的程序集。我的类路径太长,我得到“输入行太长”。这里的建议是使用 booter windows 平台,但我只能使用 Java Service Wrapper。有什么办法可以使用 java6 通配符类路径和 java 服务包装器?
7 回答
你有没有尝试过:
<useWildcardClassPath>true</useWildcardClassPath>
这为我解决了这个问题,但是,如果你还没有,你还需要确保你正在使用:
<repositoryLayout>flat</repositoryLayout>
似乎答案是“否”,没有编写插件或扩展现有插件,这不是原始问题的“答案”。
我建议在http://jira.codehaus.org/browse/MAPPASM中提交一个错误来解决它。我编写了 JSW 集成并且知道它需要更多的工作。
您也可以尝试扁平化存储库(即lib)目录的目录结构。默认情况下,appassembler 会保留深层目录结构,这会给类路径增加不必要的长度。
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<version>1.3.1</version>
<configuration>
<programs>
<program>
<mainClass>com.mycompany.app.MyApp</mainClass>
<name>runMyApp</name>
</program>
</programs>
<repositoryLayout>flat</repositoryLayout>
</configuration>
</plugin>
</plugins>
</build>
在 Windows 命令提示符下,您可以在命令提示符处使用的最大字符串长度为8191 个字符。
所以如果你的项目有太多的依赖,那么它会生成很长的类路径。
为了克服这种情况,maven-appassembler 提供了选项
在配置部分下添加这两行
<configuration>
<repositoryLayout>flat</repositoryLayout>
<useWildcardClassPath>true</useWildcardClassPath>
</configuration>
这两个选项的文档:(文档)
使用通配符类路径:
有时,您有很多依赖项,这意味着类路径很长,并且变得太长(尤其是在基于 Windows 的平台上)。在这种情况下,此选项可以提供帮助。如果您激活此选项,您的类路径仅包含一个类路径通配符 (REPO/*)。但请注意,这只适用于与 Java 1.6 及更高版本以及 repositoryLayout flat 结合使用。
存储库布局:
生成的 Maven 存储库的布局。支持的类型 - “默认” (Maven2) | “遗产”(Maven1)| “扁平”(扁平库/风格)。只有在 Maven 2.2.1 及之前的版本下运行时,才支持样式“legacy”。
作为一个长镜头...
从未使用过 JSW,也许您可以根据http://maven.apache.org/plugins/maven-assembly-plugin/source-repository.html上的代码创建自己的程序集插件并使用它。