基于一个源文件的依赖项创建JavaEclipse项目的子集

基于一个源文件的依赖项创建JavaEclipse项目的子集,java,eclipse,jar,dependencies,Java,Eclipse,Jar,Dependencies,我有一个库Eclipse项目/工作区,其中包含偶尔交付给客户的功能。我们都是研究人员,所以这是非常非正式的;我用文档制作了一个JAR和一个Word文件,并将其发送给他们 我更愿意给他们发送一个只包含他们实际需要的JAR文件,以简化事情。如果他们需要类X、Y、Z和W,那么我会发送一个JAR文件,其中包含X、Y、Z和W,以及它们所依赖的所有类 现在我正在以一种无可救药的手动方式来做这件事(我创建了一个新项目,拖拽X、Y、Z和W,然后拖拽我需要修复编译器错误的任何东西)。在Eclipse中实现自动化的

我有一个库Eclipse项目/工作区,其中包含偶尔交付给客户的功能。我们都是研究人员,所以这是非常非正式的;我用文档制作了一个JAR和一个Word文件,并将其发送给他们

我更愿意给他们发送一个只包含他们实际需要的JAR文件,以简化事情。如果他们需要类X、Y、Z和W,那么我会发送一个JAR文件,其中包含X、Y、Z和W,以及它们所依赖的所有类

现在我正在以一种无可救药的手动方式来做这件事(我创建了一个新项目,拖拽X、Y、Z和W,然后拖拽我需要修复编译器错误的任何东西)。在Eclipse中实现自动化的正确方法是什么

编辑:需要明确的是,涉及的Eclipse项目包含的类比客户实际需要的类多得多


编辑:而且,没有涉及到反射;我可以确信编译器知道发生了什么。我是编写代码的人,我像瘟疫一样避免反射。我使用反射的唯一地方是模仿集合。toArray(),在这种情况下,唯一可能导致问题的类是用户提供的类。

当您使用Export命令时,您可以选择在生成的JAR中包含哪些文件。

您当前正在复制足够的类文件,以使编译器满意。但是,是否确实复制了足够的类文件以使正在运行的应用程序满意?某些应用程序在运行时通过加载其类:

String className = "org.my.company.Foo";
Class<?> fooClass = Class.forName(className);
Object foo = fooClass.newInstance();
然后,您可以如下方式运行应用程序:

java -Djava.system.class.loader=RecordingClassLoader -Dloaded.classes.file=loaded_classes.txt YourApplication java.lang.System java.nio.charset.Charset java.lang.String ... ... YourApplication
您可以修改类加载器以忽略从
java.
包加载的任何类。运行应用程序后,您可以让一个小程序自动复制此文件中提到的类。

Byecycle,Eclipse插件会有所帮助,但它已从Sourceforge中删除。不是为了得到一个彻底的自动化过程,而是为了确定依赖关系。我不确定你是否能在Ganymede/Galileo上使用它,因为我很久以前就用过它了

更新

该工具可能会更有帮助,因为它附带了一个插件扩展API,可用于创建一个插件,以准确执行您想要执行的任务

更新#2

如果您想知道Ant的用法,可以使用ClassFileSet类型来获取类及其依赖项列表。这可以在复制任务中引用,以复制所需的类文件。请注意,这不会复制源文件

在内部,此方法取决于,因此如果您希望执行源代码的副本,可以尝试编写代码来检查.class文件的依赖关系,并将源代码复制到另一个目录。

我提交了一份支持这种重构的。同时,我发现了一些有希望的工具来帮助进行解耦和依赖性分析

  • 是一个依赖项查看器插件,包括 显示元素依赖关系的类/包依赖关系图, 与库/其他项目和依赖关系周期的关系。信息技术 还可以列出查找导致依赖关系的类
  • Java的结构分析

相关问题:

如果我只选择类XYZW,它会自动添加所需的类吗?如果我将该配置保存为“.jardesc”,那么它会根据XYZW依赖项中的任何更改动态更新输出吗?不幸的是,它不会添加所需的类。你必须全部选择。对不起,我对jardesc文件一无所知。我编写了相关的代码,我确信反射是不相关的(请参见编辑问题)。然而,对于一个稍微不同的问题,这将是一个非常好的答案我是Ant的新手,但当我尝试对涉及的特定类执行编译操作时,它只编译了这些类,没有引入依赖项。这将如何使依赖类也被编译? java.lang.System java.nio.charset.Charset java.lang.String ... ... YourApplication