Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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
Maven 如何从子项目引用父项目_Maven - Fatal编程技术网

Maven 如何从子项目引用父项目

Maven 如何从子项目引用父项目,maven,Maven,我有一个这样的多模块项目: gwt应用程序 模型 webapp(取决于gwt应用程序和型号) 当我尝试在webapps中执行任何目标时,例如启动jetty,构建失败,因为maven找不到它的依赖项(我没有将模块安装到本地repo中)。是否有可能引用父pom,以便在子模块中运行任何目标时,其所有依赖项都将被编译(重新编译)?一个pom文件的示例非常好,但在多模块项目中,我总是在dependencyManagement标记中声明父pom中的依赖项: <dependencyManagemen

我有一个这样的多模块项目:

  • gwt应用程序
  • 模型
  • webapp(取决于gwt应用程序和型号)

当我尝试在webapps中执行任何目标时,例如启动jetty,构建失败,因为maven找不到它的依赖项(我没有将模块安装到本地repo中)。是否有可能引用父pom,以便在子模块中运行任何目标时,其所有依赖项都将被编译(重新编译)?

一个pom文件的示例非常好,但在多模块项目中,我总是在dependencyManagement标记中声明父pom中的依赖项:

<dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>group-a</groupId>
        <artifactId>artifact-a</artifactId>
        <version>1.0</version>
      </dependency>
...

a组
人工制品
1
...
在模块pom中,我只需删除依赖项,而不使用版本:

<dependencies>
    <dependency>
      <groupId>group-a</groupId>
      <artifactId>artifact-a</artifactId>
    </dependency>
...

a组
人工制品
...
这样我们就可以确保每个模块使用相同的版本

需要记住的是,maven中的模块不会从父级继承依赖项。您必须声明模块本身中使用的依赖项


另一件事是,我认为,当您在IDE之外运行时(该IDE搜索工作区中的依赖项),您需要在本地repo中安装每个模块。如果您没有在父pom上执行,我认为maven不会在多模块项目中搜索未安装的依赖项。

如果您使父pom具有常规设置,如

<plugins>
</plugins>
<dependencies>
</dependencies>

然后,这些组中的任何内容都会自动继承到子pom中。子pom只需要其中的父部分:

<parent>
</parent>

您甚至不需要以这种方式在子pom中声明相同的插件或依赖项。如果使用或在父pom中,或者希望覆盖父pom中的某些内容,则只需要在子pom中列出插件或依赖项。事实上,我刚刚度过了整个这周,我的构建现在运行得很好(小孩pom在父pom中有更多的东西,比如插件配置)

我问了一个可能对你有帮助的问题: