Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java with Maven:如何使模块B依赖于模块A的jar?_Java_Maven_Intellij Idea_Jar_Dependencies - Fatal编程技术网

Java with Maven:如何使模块B依赖于模块A的jar?

Java with Maven:如何使模块B依赖于模块A的jar?,java,maven,intellij-idea,jar,dependencies,Java,Maven,Intellij Idea,Jar,Dependencies,上下文: 问题是关于使用maven构建多模块(maven,而不是java9模块)Java项目,其中一个模块依赖于另一个模块的jar 模块概述和一些上下文: A:编译成jar的库 B:一个客户端应用程序,它依赖于a的jar;编译为可执行jar C:服务器应用程序,既不依赖于a也不依赖于B;编译为可执行jar 我只能使用Java8,因此没有Java9模块 使用的IDE是IntelliJ IDEA Ultimate 什么有效: 使用mvn clean package将模块构建到三个单独的jar

上下文:

问题是关于使用maven构建多模块(maven,而不是java9模块)Java项目,其中一个模块依赖于另一个模块的jar

模块概述和一些上下文:

  • A:编译成jar的库
  • B:一个客户端应用程序,它依赖于a的jar;编译为可执行jar
  • C:服务器应用程序,既不依赖于a也不依赖于B;编译为可执行jar
  • 我只能使用Java8,因此没有Java9模块
  • 使用的IDE是IntelliJ IDEA Ultimate

什么有效:

  • 使用
    mvn clean package
    将模块构建到三个单独的jar(在BC情况下可执行)
  • 将包从模块A导入模块B的类中(不是我想要的
  • 将模块a的依赖项添加到B的pom.xml中(我不知道这有什么影响…)

我想要实现的目标:

  • 我想将一个依赖项添加到从模块a构建的jar到模块B的pom.xml中
  • 我想从模块B类中模块A的jar导入公共类和接口(通过将其作为依赖项添加到pom.xml中,而无需手动复制jar)。 ->B的开发和调试应仅依赖于A的最后一次稳定构建,而不应与库A上的同步开发中断
  • 整个构建过程应该通过执行一个Bash脚本(一次)来完成
  • 构建项目应按顺序执行以下步骤:
  • 将模块A构建到jar(如果不可避免,也构建B
  • 使用步骤1中生成的jar构建(或重建)模块B。到可执行jar
  • 在生成过程中的任何时候生成模块C


是否有一个优雅的解决方案使用maven来实现这一点?

自maven 3.5.0-beta版以来,有一个
修订版
字段用于管理多模块项目

您基本上需要您的父级
pom.xml
看起来像


4.0.0
...
...
...
...
...
${revision}
...
1.0.0-SNAPSHOT
然后你的子模块A(子模块)看起来像


...
...
...
${revision}
...
...
...
最后你的模块B是这样的


...
...
...
${revision}
...
...
...
...
模块A
${project.version}
...
您的模块C很可能看起来像模块A,但没有依赖项

这将使您的pom在本地工作。如果需要部署这些,还需要添加一个
flatte
插件,该插件将接受您的
pom.xml
,并用项目的实际版本替换变量
revision


org.codehaus.mojo
扁平maven插件
1.1.0
真的
仅限ResolveCifriendless
压平
过程资源
压平
弄平
清洁的
清洁的

您还应该能够使用mvn clean package-pl module-A独立构建项目,尽管我建议您至少同时构建A和B。

在Maven中,您通常有两种选择:

  • 定义三个项目A、B和C
  • 定义一个包含A、B和C作为模块的多模块项目
  • 在这两种情况下,都可以在
    pom.xml
    中使用Maven依赖项来描述依赖项

    多模块项目通常是一次性构建的,因此编译所有代码并对所有三个模块使用相同的版本号。这将违反您“根据上一个稳定版本进行构建”的想法,因为您在构建时总是依赖于最新版本的


    如果您定义了三个不同的项目,您就没有这些限制(而且C似乎是独立的)。还有两个问题:您需要更新依赖项中的版本,这可以通过版本插件完成。你想要构建一个“一键式构建”。最简单的方法可能是Jenkins中的管道(或任何构建服务器),但也可以编写一个shell脚本,三次调用Maven

    检查或使用相关注释我还不知道`${revision}`如何帮助您管理多模块。它确保您的依赖项与组件具有相同的版本。否则,您的依赖项中将出现版本问题。这就是maven解决问题的方法。使用此方法,您只需在一个位置更新版本,它将在所有位置自动更新。传统上,您只需使用${project.version}即可。