在Eclipse中开发了一个Java应用程序之后,我想通过将其打包到一个可运行的.jar
中来部署它,其中仅是main方法及其依赖项所必需的最小值。 >
我的工作区中也有几个软件包,但是不需要放在生成的.jar
文件中。
当我尝试导出时,它清楚地表明所需的库将在其中,而且其他独立软件包也在其中。 (使用“导出”选项时,发生的情况完全相同)
我选择仅导出com.project...
包的Main类,而且还打包了test.project...
。
在项目中,我同时拥有com...
和test...
软件包。
如何强制它仅真正包装必需的包装?
谢谢。
看来,到目前为止,尚无办法自动实现此目的,因此the answer from @arnonuem似乎是一个不错的解决方法。
如果有更好的消息,请随时改进此主题。
谢谢大家。
答案 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,请参阅堆栈溢出上的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语句绘制网络图。手动配置非常耗时,容易出错,而且我认为除了简单的情况以外,这是不可行的。我有点惊呆了。如果没有自动的解决方案来选择必要的类,那么我想人们会定期导出他们的整个代码库,并且世界上充满了肿的罐子……(顺便说一下,没有混淆,整个源代码库就可以使用了)通过逆向工程)。