如何使 Eclipse 包只需要库?
How to make Eclipse package ONLY required libraries?
在 Eclipse 中开发了一个 java 应用程序后,我想通过将其打包到一个可运行的 .jar
中来部署它 仅 主要方法及其依赖项。
我的工作区中也有几个包,但不需要在生成的 .jar
文件中。
当我尝试导出时,它清楚地表明所需的库将在那里,而且其他独立包也在里面。 (与导出选项完全相同)
我选择只导出com.project...
包的Mainclass,test.project...
也已经打包好了
在项目中我显然有 com...
和 test...
包。
我怎样才能强制它真正打包 只 需要的?
提前致谢。
临时答案(2019-07-03):
似乎目前还没有办法自动实现这一点,因此 似乎是一个很好的解决方法。
如果有更好的消息,请随时改进本帖。
谢谢大家
我会为此特定任务创建一个 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
在此页面底部有一个包含有效构建参数的列表。
首先,我们要区分构建和导出。
Build 将 .java
源代码转换为 .class
字节代码,并主要复制其他资源。这样做时,它通常会将所有源文件夹合并到一个 bin
文件夹中。
Export 运行构建(或依赖于 自动构建),然后修改生成的 .class
文件和其他资源.通常它将它们打包成一个或多个 .jar
个文件。
因此,我们的解决方案包括两个步骤:
- 构建不需要导出的所有内容到单独的文件夹(或更多)
- 从特定文件夹(或更多)导出
关于第 1 步,请参阅 Stack Overflow 上的 this answer。
简而言之:转到 Project Properties
> Java Build Path
> Source
选项卡 > Allow output folder for source folders
。这使您能够为中心查看器中的每个源文件夹配置特定的输出文件夹。
对于第 2 步,我们需要了解 Eclipse 的运行nable Jar 文件导出 依赖于启动配置。
所以在导出之前,转到 Run
> Run Configurations...
、select Classpath
选项卡,删除默认 User Entries
并点击 Advanced...
.现在您可以 Add Folders
包含您构建的 类.
您可能希望使用单独的 运行 配置进行内部测试和导出。
多年来我一直断断续续地与这个问题作斗争,假设只有我没有找到正确的解决方案。可能的解决方案似乎总是涉及详细的手动配置,例如配置构建路径,或选择 类 导出到 jar 的文件夹,或学习 ant,但仍需要手动配置。问题是 类(和包)之间的相互依赖关系很复杂 - 想象一下从 import 语句绘制网络图。手动配置非常耗时、容易出错,而且我认为除了在简单的情况下是不可行的。我有点愕然。如果没有用于选择必要 类 的自动解决方案,我想人们会定期导出他们的整个代码库,并且这个世界充满了臃肿的罐子......(顺便说一句,没有混淆,整个源代码库因此可以通过逆向工程获得)。
在 Eclipse 中开发了一个 java 应用程序后,我想通过将其打包到一个可运行的 .jar
中来部署它 仅 主要方法及其依赖项。
我的工作区中也有几个包,但不需要在生成的 .jar
文件中。
当我尝试导出时,它清楚地表明所需的库将在那里,而且其他独立包也在里面。 (与导出选项完全相同)
我选择只导出com.project...
包的Mainclass,test.project...
也已经打包好了
在项目中我显然有 com...
和 test...
包。
我怎样才能强制它真正打包 只 需要的?
提前致谢。
临时答案(2019-07-03):
似乎目前还没有办法自动实现这一点,因此
如果有更好的消息,请随时改进本帖。
谢谢大家
我会为此特定任务创建一个 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
在此页面底部有一个包含有效构建参数的列表。
首先,我们要区分构建和导出。
Build 将 .java
源代码转换为 .class
字节代码,并主要复制其他资源。这样做时,它通常会将所有源文件夹合并到一个 bin
文件夹中。
Export 运行构建(或依赖于 自动构建),然后修改生成的 .class
文件和其他资源.通常它将它们打包成一个或多个 .jar
个文件。
因此,我们的解决方案包括两个步骤:
- 构建不需要导出的所有内容到单独的文件夹(或更多)
- 从特定文件夹(或更多)导出
关于第 1 步,请参阅 Stack Overflow 上的 this answer。
简而言之:转到 Project Properties
> Java Build Path
> Source
选项卡 > Allow output folder for source folders
。这使您能够为中心查看器中的每个源文件夹配置特定的输出文件夹。
对于第 2 步,我们需要了解 Eclipse 的运行nable Jar 文件导出 依赖于启动配置。
所以在导出之前,转到 Run
> Run Configurations...
、select Classpath
选项卡,删除默认 User Entries
并点击 Advanced...
.现在您可以 Add Folders
包含您构建的 类.
您可能希望使用单独的 运行 配置进行内部测试和导出。
多年来我一直断断续续地与这个问题作斗争,假设只有我没有找到正确的解决方案。可能的解决方案似乎总是涉及详细的手动配置,例如配置构建路径,或选择 类 导出到 jar 的文件夹,或学习 ant,但仍需要手动配置。问题是 类(和包)之间的相互依赖关系很复杂 - 想象一下从 import 语句绘制网络图。手动配置非常耗时、容易出错,而且我认为除了在简单的情况下是不可行的。我有点愕然。如果没有用于选择必要 类 的自动解决方案,我想人们会定期导出他们的整个代码库,并且这个世界充满了臃肿的罐子......(顺便说一句,没有混淆,整个源代码库因此可以通过逆向工程获得)。