有没有办法阻止开发人员使用某种导入?

时间:2013-11-13 15:33:08

标签: java design-patterns

我有一个使用Jasper生成报告的应用程序。为了封装复杂性并提供与Jasper API的统一接口,我创建了一个“中间”接口,它包装了Jasper类并将客户端调用委托给它们。这也可以使将来更容易更改报表机器 - 例如Crystal Reports。

问题是,由于Jasper类在类路径中,开发人员(包括我自己)可能会在业务代码中直接意外地使用它的某些类,并且这可能会在很长一段时间内被忽视。我想避免这种情况,或者至少在发生这种情况时得到通知。

环境基本上是日食,maven,git,sonar,bamboo ci。

我确信这不是一个不常见的场景,那么,最好的交易方式是什么?设计模式,日食/ maven插件,声纳警报?或者也许是一些简单的东西,我只是没有看到?

4 个答案:

答案 0 :(得分:3)

在maven中,您可以指定库仅用于运行时。这允许您根本不编译该库。如果你不使用maven的Jasper,你可以完全避免使用它。如果它是一个瞬态依赖项,您可以通过添加<exclusion>来强制执行此操作。

答案 1 :(得分:1)

你应该有两个独立的eclipse项目:一个用于报告库,另一个用于其余项目。

报告库项目包含您的接口,Jasper jar文件和特定于Jasper的接口实现。

另一个项目依赖于报告库项目(您可以在“Java Build Path” - &gt;“Projects”下的项目属性对话框中设置项目依赖项。

由于报告项目仅将源文件夹导出到另一个项目,因此在开发时不能看到jasper类。

答案 2 :(得分:1)

我自己并没有太多使用它,但是如果你需要更多地控制你的依赖项,你可以尝试DCL Suite,一个Eclipse插件。它允许您在模块之间定义约束,您可以将模块声明为类,一组类,包等

答案 3 :(得分:0)

只有处理了Jasper的类加载并将其作为资源(jar文件)包含在自己的jar中才能实现。然后没有人会知道它是直接可用的。这是一个如何在自己的jar文件中包含jar的示例 - &gt; An embedded jar classloader in under 100 lines