eclipse,一个用于编译的类路径,另一个用于启动的类路径

时间:2010-04-23 21:12:07

标签: eclipse classpath

例如:
对于日志记录,我的代码使用log4j。但是我的代码依赖的其他jar,使用slf4j代替。因此两个罐子必须在构建路径中。不幸的是,我的代码现在可以通过上下文辅助或其他一些开发人员更改直接使用(依赖于)slf4j。我想任何使用slf4j显示为错误,但我的应用程序(和测试)在运行时仍然需要它在类路径中。

说明:
我想知道这是否可能在日食中。这种情况经常发生在我身上。我将有一个大型项目,它使用了很多第三方库。当然,这些第三方罐子也有自己的依赖关系。因此,我必须在类路径(eclipse中的“构建路径”)中包含所有依赖项,以便应用程序及其测试进行编译和运行(从eclipse中)。

但我不希望我的代码使用所有这些jar,只是我自己决定的几个直接依赖项。因此,如果我的代码意外地使用了依赖项的依赖项,我希望它显示为编译错误。理想情况下,没有找到类,但任何错误都可以。

我知道我可以在eclipse之外运行时手动配置类路径,甚至在eclipse中我可以修改我正在运行的特定类的类路径(在运行配置中),但如果你运行很多,这是不可管理的个别测试用例,或者有很多main()类。

5 个答案:

答案 0 :(得分:2)

听起来您的项目有足够的依赖关系,您可以考虑使用OSGi包(插件)构建它。每个bundle都有自己的类加载器,并可以指定它依赖的bundle(以及可选的版本范围等),它导出的包,是否从其依赖项中重新导出东西等。

Eclipse本身是由Eclipse插件和片段构成的,这些插件和片段只是OSGi捆绑包,附带一些可选的额外Eclipse连接(plugin.xml,用于声明Eclipse“扩展点”和“扩展” “)附上。因此,Eclipse具有相当好的工具,可用于创建和管理内置的bundle(通过Plug-in Development Environment)。你在那里发现的大部分内容可能会导致你将“OSGi bundle”与“扩展Eclipse IDE的插件”混为一谈,但这两个概念是完全可分的。

Eclipse工具确实在构建环境中的捆绑包与特定运行配置包含的捆绑包之间进行了相当清晰的区分(有时令人烦恼,但在“有用的医学”方式)。

在OSGi土地上生活了几年之后,默认的Java“扁平路径”感觉很奇怪,甚至对我来说都很糟糕,很大程度上是因为(正如你所经历的那样)它将所有JAR扔进一个巨大的竞技场并希望他们可以解决一些问题。 OSGi环境让我对依赖关系有了更多的控制,因为“副作用”自然也需要澄清这些关系。在这些明确的声明和工具的执行之间,项目的结构对团队中的每个人都更为明显。

  

如果我的代码意外地使用了依赖项的依赖项,我希望它显示为编译错误。理想情况下,没有找到类,但任何错误都可以。

将代码放在一个插件中,直接依赖于其他插件,将其依赖放在其他插件中等,并声明每个插件的依赖项。 Eclipse将立即完成你想要的。在自动填充中不会向您提供依赖项的依赖项内容;你会得到红色的曲线并造成错误;等

答案 1 :(得分:1)

为什么不使用access rules来保持代码清洁?

答案 2 :(得分:0)

看起来最好用maven管理,用 m2eclipse 集成在eclipse中。

这样,您只能执行部分maven构建生命周期,并且您可以在每个构建步骤中管理单独的依赖项集。

答案 3 :(得分:0)

根据我的经验,它有助于提高效率,我让团队填写(纸质)表格,为什么需要这个罐子以及许可证......

并且他们确实输入了几行代码而不是沿着20个罐子拖动来仅使用一行代码或另一个花哨的“功能”来打开文件。

使用maven可能会有一段时间的帮助,但是当你第一次看到像夜间版本或快照这样的名字的罐子时,你会知道你在罐子里。“

结论:很好地选择依赖

答案 4 :(得分:0)

使用slf4j-over-log4j jar会有用吗?这允许使用slf4j实际记录到log4j。