Java - 模块化库项目 - 如何?

时间:2015-04-05 22:01:40

标签: java maven netbeans module sdk

我应该为我工作的公司提供Java的SDK。 我有几年的Java EE经验,但在开发API和SDK方面却没那么多。

这里的问题是SDK已经在.NET C#中可用并且工作得很好。我自己做的。 切换到Java是一场噩梦。我试过几个解决方案。一切都失败了,有些因为我无法进步而没有结果。

正如标题所说,我需要开发一个包含模块的Java库。内部模块。那里的世界模块不应该看/使用/修改。

在C#中,它很简单:创建模块各自的命名空间,使它们的类和方法私有化,用内部将一个或多个包装器(桥)暴露给整个程序集(项目),以便&# 34;主模块",通过它自己可以访问的公共包装器,可以使用这些内部模块中提供的工具。

这里的关键字是INTERNAL。我认为这很容易理解。让我们举一个例子吧。 我们假设SDK由4个模块组成。

  1. 第一个模块,是主要模块,是公共的模块 暴露在全世界。换句话说,唯一的切入点 的SDK。它就像是自己宇宙的主人。它可以使用 内部模块随意,但永远不会向世界展示。 从不。
  2. 第二个模块与网络相关。与此同时,它处理网络以管理与远程服务的连接,从流中读取数据和向流写入数据。它提供了自己的小包装器,因此主模块不需要使用第二个模块内部工具。就像宇宙中的宇宙一样。
  3. 第3个模块是数据处理模块。它接收数据包(由第二个模块手工制作),以便处理它并处理相关信息。
  4. 所以我们在这里。如何使用NetBeans在Java中执行此操作?

    我尝试使用POM Project和Netbeans模块。一场噩梦。

    我尝试创建多个库(每个模块一个),调整主模块库以包含其(模块)依赖项,但它不起作用。 在标准的Java EE控制台应用程序中,只要我尝试实现我的SDK Manager(主模块中的主包装器),它就会失败,因为Class Not Found异常:找不到与内部子模块相关的类。 如果我将相应Jar的所有模块添加到此Java控制台应用程序中,它可以访问所有包装器。那里的乐趣在哪里?

    感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

项目Jigsaw最终会在java 9发布时为您提供所需内容。

请参阅此article,了解拼图的工作原理,特别是

  

模块声明中的exports子句使公共类型成为   它命名的包可用于其他模块,因此我们可以使用Jigsaw   定义边界,并非所有公共类型都可以从其他公共类型中使用   模块,我们必须明确指定哪些类型是可见的。