如何使Eclipse包仅包含必需的库?

时间:2019-06-30 23:27:36

标签: java eclipse jar executable-jar

在Eclipse中开发了一个Java应用程序之后,我想通过将其打包到一个可运行的.jar中来部署它,其中是main方法及其依赖项所必需的最小值。 >

我的工作区中也有几个软件包,但是不需要放在生成的.jar文件中。

Eclipse exportation snapshot

当我尝试导出时,它清楚地表明所需的库将在其中,而且其他独立软件包也在其中。 (使用“导出”选项时,发生的情况完全相同)

Package view snapshot

我选择仅导出com.project...包的Main类,而且还打包了test.project...

在项目中,我同时拥有com...test...软件包。

如何强制它仅真正包装必需的包装?

谢谢。

临时答案(2019-07-03):

看来,到目前为止,尚无办法自动实现此目的,因此the answer from @arnonuem似乎是一个不错的解决方法。

如果有更好的消息,请随时改进此主题。

谢谢大家。

3 个答案:

答案 0 :(得分:2)

我将为此特定任务创建一个ANT文件。在那里,您可以自由地自定义应将哪些软件包编译到jar中,以及哪些不应该编译。 请启发自己阅读此示例。

对于一般概述,我在说什么,您可以快速了解一下。 https://howtodoinjava.com/ant/ant-build-jar-file-example/

请关注

<javac srcdir="${src.dir}" destdir="${build.dir}" classpathref="classpath"
        includes="src/path/to/TheClassToBeIncluded.java" />

有关如何包括或排除文件或软件包的更多详细信息,请参阅此处的文档:

https://ant.apache.org/manual/Tasks/javac.html

此页面底部有一个包含有效构建参数的列表。

答案 1 :(得分:1)

首先,我们必须区分构建和导出。

Build .java源代码转换为.class字节代码,并主要复制其他资源。这样做时,通常会将所有源文件夹合并到一个bin文件夹中。

导出运行构建(或依赖于自动构建),然后修改生成的.class文件和其他资源。通常,它将它们打包到一个或多个.jar文件中。

因此,我们的解决方案包括两个步骤:

  1. 将不需要导出的所有内容构建到单独的文件夹(或更多文件夹)中
  2. 从特定文件夹(或更多文件夹)中导出

有关步骤1,请参阅堆栈溢出上的this answer

简而言之:转到Project Properties> Java Build Path> Source标签> Allow output folder for source folders。这样,您可以为居中查看器中的每个源文件夹配置一个特定的输出文件夹。

对于步骤2,我们需要了解eclipse的可运行Jar文件导出依赖于启动配置

因此,在导出之前,请转到Run> Run Configurations...,选择Classpath标签,删除默认的User Entries并点击Advanced...。现在,您可以Add Folders包含内置的类了。

您可能要使用单独的“运行配置”进行内部测试和导出。

答案 2 :(得分:0)

多年来,我一直在为这个问题苦苦挣扎,假设只有我一个人没有找到正确的解决方案。可能的解决方案似乎总是涉及详细的手动配置,例如配置构建路径,或选择将类导出到jar或学习蚁的文件夹,但仍需要手动配置。问题在于类(和包)之间的相互依赖关系很复杂-想象从import语句绘制网络图。手动配置非常耗时,容易出错,而且我认为除了简单的情况以外,这是不可行的。我有点惊呆了。如果没有自动的解决方案来选择必要的类,那么我想人们会定期导出他们的整个代码库,并且世界上充满了肿的罐子……(顺便说一下,没有混淆,整个源代码库就可以使用了)通过逆向工程)。