java - 帮助我理解如何使带有非 Maven jar 依赖项的 Maven 项目可供其他人使用

标签 java maven-2 dependencies open-source

我正在学习maven(以及java打包和分发),我正在制作一个新的oss项目作为练习。这是我的情况,当然都是java:

我的主要项目是 ProjectA,基于 github 存储库中的 maven。我还在 github 中创建了一个基于 maven 的实用程序项目:ProjectB。 ProjectA 依赖于我进行了大量修改的项目,该项目最初来自基于 google-code ant 的存储库 ProjectC。

那么,我如何设置 ProjectA 的构建,以便有人可以下载 ProjectA.jar 并使用它,而无需安装 ProjectB 和 ProjectC 的 jar,以及如何设置构建以便有人可以 checkout ProjectA 并运行“mvn package”进行完整编译?

(此外,我应该如何处理修改后的 ProjectC 版本?将类文件直接包含到 ProjectA 中,或者将项目 fork 为可以用作 Maven 依赖项的东西?)

我一直在阅读,链接如 this SO questionthis SO question ,但我不清楚这些与我的特定情况有何关系。因此,任何帮助将不胜感激。谢谢!

最佳答案

So, how do I set up the build for ProjectA such that someone can download ProjectA.jar and use it without needing to install jars for ProjectB and ProjectC

假设 ProjectA 是一个 JAR,您可以创建一个可执行 JAR,将依赖项与 Maven Assembly Plugin 捆绑在一起。 (和预定义的 jar-with-dependencies 描述符)或使用 Maven Shade Plugin .

how do I set up the build such that someone could check out ProjectA and run only 'mvn package' for a full compile?

您必须将依赖项部署到可以通过 HTTP 读取的存储库,并在 pom.xml 中声明此存储库。 AFAIK,git-hub 不提供任何设施。但任何带有 FTP 的网络托管服务access(或者更好的是,scp)应该可以解决问题。如果您的项目是开源的,另一个选择是使用 Sonatype 的 OSS Repository Hosting服务。

以防万一,您可能想阅读 this blog post但你不会学到更多的东西。

最简单的方法仍然是将这 3 个项目组织为一个多模块 Maven 项目并构建所有模块。

Additionally, what should I do with my modified version of ProjectC?

从模块化的角度来看(假设您找到了上述有关存储库部分的解决方案),将其作为单独的模块肯定是有意义的,特别是如果有人有机会在您的项目之外使用 ProjectC 的话。

关于java - 帮助我理解如何使带有非 Maven jar 依赖项的 Maven 项目可供其他人使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2945148/

相关文章:

maven-2 - Maven : OSGI, bundle 和多模块项目

maven-2 - 我的profiles.xml有什么问题?

java - 解决特定时间点的 Maven 有效依赖关系

c++ - wintab32.dll 丢失,导致崩溃?

java - 使用套接字服务器/客户端传输文件

java - Windows 上从 Java 到 C++ 的高效数据传输

java - 在 Java 中使用正则表达式提取值

java - 如何从大小为 n 的数组(无重复)创建所有可能的大小为 k 的子集?

tomcat - 使用 Maven 从远程存储库下载快照文件

git - 解决 Docker 容器中的 Go 依赖项