2009-05-29 79 views
2

我们在类路径中有一些遗留的java应用程序,其中包含许多类文件夹和多余的jar文件。一个供应商甚至通过一个“覆盖”jar来发布更新,我们必须将其预先添加到classpath中。尽管清理应该是一个中期目标,但我想知道是否有任何工具可以将所有这些目录/ jar合并到一个结构中,该结构表示实际上将在正在运行的系统中进行类加载的文件的版本。我想我可以编写一个脚本,按照正确的顺序将目录复制到另一个上面,并将瓶子等裂开。但是,我希望这已经完成了。折叠难处理的Java类路径

OneJar(http://one-jar.sourceforge.net/)可以将一个类路径收集到一个封闭的jar中,但它依赖于一个特殊的类加载器实现来访问jar中的jar。

下面的评论者(谁应该重新提交此作为一个答案!)有一个很好的建议。我还没有机会对它进行测试。一个解决方案的

+1

没有尝试发罐(http://fjep.sourceforge.net/),它打开的所有JAR文件。 – 2009-06-08 10:35:38

+0

看起来很有希望。你可以发布这个答案,以便我可以投票吗? – ShabbyDoo 2009-06-09 16:03:23

回答

1

一部分可能是运行了代码覆盖工具的样本会话。如果你确保你的应用程序具有所有的功能,那么没有覆盖的类将不会被使用,你可以将它们过滤掉。

事实上,它可能不是很难获得的类,是从覆盖报告中使用列表,然后在列表中的每个类查找JAR /源文件夹,并在已定义并将其添加到列表(或者说,设置)。我发现有用的是,标准的Unix grep工具实际上非常适用于查看给定类所在的JAR文件;尽管由于您不能完全限定名称,我预计它会偶尔出现误报,因此不应以自动方式使用。

希望这有助于你一起想办法!

+0

好主意。这将是一个额外的好处。作为第一步,我只想过滤掉我知道不会被类加载的东西,比如类路径中的所有Foo类比Patch1-7-12.jar中的Foo(第一个类路径项)低。是的,这是不好的! – ShabbyDoo 2009-05-29 14:06:39

0

我不经常有一个问题,多达5000个字符的类路径都没有。话虽如此,我敢打赌我可以通过一个比这更长的时间。我没碰上一个实例几次,其中Windows 2000中有一个Shell限制,我不得不使用XP外壳cmd.exe的,因为它持有更长的缓冲...

什么是类路径的最大长度您试图通过?