【问题标题】:Creating Pluggable Project with Maven使用 Maven 创建可插拔项目
【发布时间】:2011-01-03 22:08:31
【问题描述】:

我目前正在开发一个 maven java web 应用程序项目,我需要扩展它以添加额外的功能,但不更改原始代码库。因此,Web 应用程序应该将新请求转发到另一个处理它们的 jar。问题是我们需要 jar 是可插入的,以便我们可以替换它或将更多 jar 作为更多插件添加到项目中,而无需更改原始代码库,包括不更改每个新 jar 的 maven pom.xml 文件(插件) 所以我不能在 pom 文件中硬编码对这个 jar 的依赖

那么有没有办法在打包我的项目时设置 maven 配置文件以指示 maven 选择哪些插件?

【问题讨论】:

    标签: java spring maven-2 maven


    【解决方案1】:

    您不想在运行时(不仅仅是在构建时)插入 jar 吗?我会推荐一个系统,您可以在其中单独构建您的 Web 应用程序。然后将插件 jar 构建为单独的项目。在运行时,在文件系统上定义一个文件夹,您将在其中查找插件 jar,然后构造 UrlClassLoader 实例以访问这些 jar 中的类。

    【讨论】:

      【解决方案2】:

      抱歉这么晚才回答,但我们也有类似的要求,所以我们创建了四个 maven 项目

      1. 你的主要项目是你想要可插拔特性的地方。

      2. 第二个是接口,它将声明一组接口类,可插入插件需要实现这些接口类才能在主项目中调用。

      3. 第三个是 POM 构建项目,它将充当所有自定义插件的父项目,作为 pom.xml 中的模块,类似于 spring boot 启动项目依赖项。任何需要创建的新插件都会将此 POM 项目作为父项目。该项目基本上是 CICD 的辅助项目,因此我们的自定义插件 jar 被构建并推送到我们的自定义存储库
      4. 这将是一个参考项目,在其 pom.xml 中包含所有自定义插件作为依赖项,并且此项目信息将在主项目中,因此当主项目构建时,所有自定义插件成为主项目的类路径

      您的主要父插件项目将在其 pom.xml 中将第二个接口插件引用作为依赖项,以便自定义插件可以实现该接口。它还将具有第四个项目的引用,以便所有自定义插件都在我们主项目的类路径中。

      现在,当您构建父 POM 项目时,所有自定义插件都将构建为 jar 并存储在您的 .M2 文件夹中。

      现在要在您的主项目中访问这些自定义插件,您需要将 pon.xml 中的接口引用依赖项作为依赖项,现在构建将是

      1. 要 mvn 安装界面项目
      2. 要 mvn 安装父 pom 项目
      3. 要 mvn 安装第四个项目
      4. 要 mvn 安装主项目

      一旦构建了第四个项目,您将在主项目的类路径中拥有所有自定义插件。然后你可以使用服务加载器类或netbeans查找方法来加载所有实现接口项目中定义的接口的类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-11
        • 2014-03-28
        • 2022-12-20
        • 2010-12-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多