如何更好地处理两个 JAR 中具有相同 类 的问题
How to better handle having the same classes in two JARs
我写了两个罐子。他们每个人负责发送不同的 http/https 请求。
他们每个人自然都使用某些相同的 classes。就像构建请求或发送请求的那些一样。该过程可能有点不同,但总体结构和 classes 名称仍然相同。
我的经理要求为每个请求构建不同的 jar!因此,我的所有 http 请求都使用 1 个 jar 是不可接受的。
现在,在我的客户端程序中,我需要为 JarA 发送一次请求,一次从 JarB 发送请求。但是编译失败了,因为自然而然地,我对 classes 和方法使用了非常相似的命名。
例如,我在两个 jar 中都有一个 UserData class。所以当我尝试在我的客户端程序中使用它时,编译器大喊:"reference to SystemData is ambiguous".
我可以开始即兴创作每个罐子的特定 classes 名称,但它很难看...
您建议如何解决这个问题?
将 common 类 放在第三个 jar 中,然后将其捆绑在两个 http jar 中或在运行时将其添加到类路径中(最佳选择取决于您的部署方式等)。 ).
如果 类 相同,将它们拉出到第三个 JAR 中,然后让客户端程序引用公共 JAR 加上 JarA 或 JarB。
如果类相似但不完全相同,则将它们放入不同的包中。如果它们在不同的包中,您可以使用相同的名称 类。
使用像 maven 这样的构建系统,其中一个可以有库依赖项,到一个通用的第三个 jar。它维护版本化 jar 的存储库。
首先你必须决定你正在使用哪种架构。
如果经理为了模块化要求您使用不同的 jar - 确保制作包含所有常见 classes.
的通用 jar 是值得的
我想您应该使用 Maven、Gradle 或其他可以帮助您管理依赖项的构建系统来构建您的项目。
另一个问题可能是您是否应该做 'Microservices' 架构。那么代码重复是不可避免的。
为了在重复时克服相同的 class 名称 - 我建议为每个模块设置不同的包名称。
一个解决方案是 - 如果您在两个不同的 jar 中看到相同的 class 和相同的包,并且您的项目需要这两个 jar,
Solution
you can download the source code of that duplicate class and creat keep the same in your project with package structure. So this way JVM loads your project classes first and give first preference to invoke your project class rather then other jar's class
我写了两个罐子。他们每个人负责发送不同的 http/https 请求。
他们每个人自然都使用某些相同的 classes。就像构建请求或发送请求的那些一样。该过程可能有点不同,但总体结构和 classes 名称仍然相同。
我的经理要求为每个请求构建不同的 jar!因此,我的所有 http 请求都使用 1 个 jar 是不可接受的。
现在,在我的客户端程序中,我需要为 JarA 发送一次请求,一次从 JarB 发送请求。但是编译失败了,因为自然而然地,我对 classes 和方法使用了非常相似的命名。
例如,我在两个 jar 中都有一个 UserData class。所以当我尝试在我的客户端程序中使用它时,编译器大喊:"reference to SystemData is ambiguous".
我可以开始即兴创作每个罐子的特定 classes 名称,但它很难看...
您建议如何解决这个问题?
将 common 类 放在第三个 jar 中,然后将其捆绑在两个 http jar 中或在运行时将其添加到类路径中(最佳选择取决于您的部署方式等)。 ).
如果 类 相同,将它们拉出到第三个 JAR 中,然后让客户端程序引用公共 JAR 加上 JarA 或 JarB。
如果类相似但不完全相同,则将它们放入不同的包中。如果它们在不同的包中,您可以使用相同的名称 类。
使用像 maven 这样的构建系统,其中一个可以有库依赖项,到一个通用的第三个 jar。它维护版本化 jar 的存储库。
首先你必须决定你正在使用哪种架构。 如果经理为了模块化要求您使用不同的 jar - 确保制作包含所有常见 classes.
的通用 jar 是值得的我想您应该使用 Maven、Gradle 或其他可以帮助您管理依赖项的构建系统来构建您的项目。
另一个问题可能是您是否应该做 'Microservices' 架构。那么代码重复是不可避免的。
为了在重复时克服相同的 class 名称 - 我建议为每个模块设置不同的包名称。
一个解决方案是 - 如果您在两个不同的 jar 中看到相同的 class 和相同的包,并且您的项目需要这两个 jar,
Solution
you can download the source code of that duplicate class and creat keep the same in your project with package structure. So this way JVM loads your project classes first and give first preference to invoke your project class rather then other jar's class