1

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

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

环境基本是eclipse、maven、git、sonar、竹子。

我敢肯定这不是一个罕见的情况,那么,最好的处理方式是什么?设计模式、eclipse/maven 插件、声纳警报?或者也许是我没有看到的简单的东西?

4

4 回答 4

3

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

于 2013-11-13T15:40:51.160 回答
1

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

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

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

由于报告项目仅将源文件夹导出到其他项目,因此在开发时无法看到 jasper 类。

于 2013-11-13T15:41:39.360 回答
1

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

于 2013-11-14T08:24:50.440 回答
0

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

于 2013-11-13T15:39:06.623 回答