可以“在Eclipse中导出到JAR”和javac一样聪明吗?

时间:2011-07-08 09:51:44

标签: java eclipse jar javac

我想将一部分Java项目导出到一个jar文件中,同时只包含运行主类所必需的类文件。该项目包含具有相似但不相同的依赖项的其他主类。我可以运行自定义脚本来实现它,如下所示:

mkdir temp
cd temp
javac -sourcepath "../" -d . ../MAINCLASS_A.java
jar cmf MAINCLASS_A.manifest ../MAINCLASS_A.jar *

为了优雅并且更容易与他人分享,我想直接从Eclipse而不是这个自定义脚本运行它。但是,当我导出到JAR文件或Runnable JAR文件时,项目中的每个类文件都包含在内。我知道我可以设置手动过滤器来排除某些文件,但似乎应该有一个更聪明的选项。如何将Eclipse配置为仅包含主类实际依赖的类文件?

2 个答案:

答案 0 :(得分:2)

我认为在一般情况下你想要做的事情是不可能的。是的,从理论上讲,javac可以找到(并找到)类之间的所有依赖关系。但只有在项目中对这些依赖项进行硬编码时才是正确的,即您不直接或间接使用任何动态类加载和反射。

真正的应用程序通常使用各种第三方库,框架等。因此,即使您从未在自己的代码Class.forName()中说出,有时也会使用动态类加载。我认为如果你需要这种优化,你必须编写自定义脚本来构建自定义jar。 BTW你需要它的事实可能会给你一个提示,你的项目组织不正确。您应该将项目分成2个或更多。每个应该只包含其依赖项。在这种情况下,您可以使用内置的eclipse功能来打包jar文件。

答案 1 :(得分:0)

你做不到。直到运行时才会知道主类所依赖的所有类。

说,我们正在使用Class.forName("com.foo.Bar")加载一个类。在这种情况下,主类中对com.foo.Bar的唯一引用是字符串文字,javacjar不会加载。

因此,您唯一的选择是设置手动过滤器,保存.jardesc文件并将其用作脚本以便稍后创建类似的Jar文件。

这应该会让你有个先机。

http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Ftasks%2Ftasks-33.htm