maven-2 - 具有修补依赖项的 Maven 项目的布局

标签 maven-2 patch

假设,我有一个依赖于某个库的开源项目,必须对其进行修补才能解决一些问题。我怎么做?我的想法是:

  • 将该库源设置为模块,将它们保存在我的 vcs 中。优点:简单。缺点:我的仓库中有一些第三方资源,可能会减慢构建过程,很难找到修补的地方(尽管可以在 README 中修复)
  • 有一个模块,就像 1 一样,但只保留修补的源文件,在类路径中使用原始库 jar 编译它们,并在构建时以某种方式替换库 jar 中的 *.class 文件。优点:构建速度更快,更容易找到修补的地方。缺点:难以配置,jarhackery 不明显(存储库中的库 jar 和我的项目程序集中会不同)
  • 将修补过的 *.class 文件保存在 main/resources 中,并像 2) 一样在包装上替换。优点:几乎没有。缺点:vcs 中的二进制文件,很难重新编译修补的类,因为修补程序编译不是自动化的。

  • 一个不错的解决方案是使用已修补的库源创建一个独特的项目,并使用 -patched 限定符将其部署在本地/企业存储库上。但这不适合任何查看其源代码的人都可以轻松构建的开源项目。或者我应该说“而且,在你构建我的项目之前,请检查那些东西并运行 mvn install”。

    最佳答案

    One nice solution is to create a distinct project with patched library sources, and deploy it on local/enterprise repository with -patched qualifier. But that would not fit for an opensourced project that is meant to be easily buildable by anyone who checks out its sources. Or should I just say "and also, before you build my project, please check out that stuff and run mvn install".



    这就是我将为公司和开源项目所做的(实际上也是我所做的)。获取源代码,将它们置于不同项目中的版本控制下,修补它们,重建修补的库(并将此信息包含在版本中,例如 X.Y.Z-patched),将其部署到存储库(您可以为此使用 SVN, a la Google Code1),在您的 POM 中声明存储库并更新依赖项以指向您的修补版本。

    使用这种方法,您可以对您的用户说:查看我的代码并运行 mvn install他们只会获得修补版本而无需任何额外操作。这是恕我直言,最干净的方式(不容易出错,没有类路径顺序困惑,没有增加构建时间等)。

    1 很多人正在将他们的代码部署到他们托管的 Subversion 存储库(this post 中的操作方法)。

    关于maven-2 - 具有修补依赖项的 Maven 项目的布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2619225/

    相关文章:

    python - 使用 matplotlib.patches 修正圆形图的纵横比

    maven-2 - Maven : Different configuration for different goals

    maven-2 - Maven : How to use jetty:run in a multi-module Maven project, 无需安装

    python - 如何模拟单例类方法

    elasticsearch - Elasticsearch集群中所有节点的滚动节点重启

    http - PATCH 和 PUT 请求之间的主要区别是什么?

    java - 如何改进我们的构建和部署过程?

    tomcat - maven一行部署到tomcat集群(多个)

    java - maven 可重用资源项目是否可行?

    spring - Spring bean 配置文件在 Maven WAR 模块中的位置?