1

我有一个由几个模块组成的 Maven 项目。这将部署在客户端计算机上,将涉及安装 Tomcat,并将使用 NSIS 进行安装程序。有一个单独的应用程序可以监控 tomcat 并可以重新启动它、执行更新等。

所以,我的模块设置如下:

项目
  +-- 客户端(所有代码,处理程序,用于战争)
  +-- client-common - (共享代码,在监视器和客户端之间共享)
  +-- client-web - (战争,基本上只是使用战争有applicationcontext,web.xml等)
  +-- 监视器 - (监视器应用程序 jar。使用包装器运行)

所以,我需要创建一个安装程序。我正计划创建另一个模块,即安装程序。这是我拥有 tomcat 目录的地方,我希望 maven 能够“组装”所有内容,然后运行 ​​NSIS,这样我就可以创建最终的安装程序。

但是,我需要将监视器 jar 文件放在一个目录中,然后将所有监视器依赖项放在 lib/ 目录中。最终的目录结构应该是:

项目安装程序目录/monitor/monitor-version.jar
项目安装程序目录/monitor/lib/monitor-dep-1.jar
项目安装程序目录/monitor/lib/monitor-dep-2.jar
项目安装程序目录/monitor/lib/monitor-dep-3.jar
项目安装程序目录/webapps/client-web.war

在 client-web\WEB-INF\lib 目录中,我们将在它被分解后拥有所有 client-web 的依赖项。那行得通,我有 .war 文件。我遇到的问题是让监视器模块依赖项独立于客户端 Web 模块的依赖项。

我试图只创建安装程序模块并制作监视器和客户端 Web 依赖项,但是当我使用依赖项复制时,它给了我一切。不是我想要的。

我倾向于创建一个名为 monitor-assembly 的新模块,或者给我一个包含我需要的目录格式的 zip 文件,但那是另一个模块。

有人可以帮我用正确的方法来完成这个吗?

谢谢!

4

1 回答 1

0

最优雅的方法是编写自己的 Maven 插件或扩展maven-dependency-plugin. 实际上,您需要的非常接近dependency:copy-dependencies,但您需要指定要从哪个工件开始。正如我从代码中看到的,目前这是不可能的。

进一步的想法:您可以为每个模块创建一个 zip 程序集(包括您需要的模块依赖项)并使用 dependency:unpack 在您的安装程序模块中解压这些 zip。

于 2010-04-20T06:51:14.233 回答