使用 maven 构建 api 唯一的工件

building api only artifact with maven

鉴于我们的 Maven projet 提供了一些 api 供客户与之交互,这些只是少数 java 在内部代码库中实现的接口...

现在,如果我们只构建 jar 并发布它,任何人都可以看到我们用于实现的内部 类,但我们只需要发布几个 java 接口(连同几个 DTO 类也许)...

是否可以准确选择我们要为其构建 jar 的 java 文件并创建两个工件,例如 (product.jar/war 和 product-api.jar)

目的是限制其他团队可能滥用代码...

最好是在 Maven 中创建单独的模块来代表您的模块,例如:

project-api

只包含接口,其他人可以单独使用。

project-impl

一个实现等 以上使测试更容易等是关注点分离的一个不错的选择。

您的问题是关于保护代码而不是一般的 Maven。您可以拥有多模块 Maven 项目,但仍然任何人都可以下载并反编译它。 很少有想法,因为 Java 确实有内置机制来支持这一点,但有解决方法……一些想法..

  1. 将项目打包成jar时,不要put.java 类 in jar/build。 好吧,代码可以反编译回 java 但至少你不会 以 .java 类 开头。
  2. 你可以混淆你的代码 各种可用选项。读取位here...
  3. 在极端情况下, 将您的 api 公开为您为其定义合同的 Web 服务 request/response。没有人可以看到您的代码...