Maven子模块不存在

Mik*_*ike 14 java maven

我是Maven的新手.我从SVN检查了一个具有以下结构的客户的项目:

projectName
|--> pom.xml
|--> jetty-wrapper
     |--> pom.xml
     |--> bin
          |--> pom.xml
|--> projectName-common
     |--> pom.xml
     |--> bin
          |--> pom.xml
|--> projectName-war
     |--> bin
          |--> pom.xml
Run Code Online (Sandbox Code Playgroud)

"projectName"(顶部的pom)正下方的pom.xml正在构建三个模块

<modules>
    <module>projectName-common</module>
    <module>projectName-war</module>
    <module>jetty-wrapper</module>
</modules>
Run Code Online (Sandbox Code Playgroud)

但是mvn clean install从文件夹执行projectName时会出现以下错误

Child module [...]projectName\projectName-war\pom.xml of [...]projectName\pom.xml does not exist
Run Code Online (Sandbox Code Playgroud)

问题是:下面是否应该有一个pom.xml projectName-war,就像我的客户可能忘记提交给SVN的其他模块一样?

小智 29

Child module [...]projectName\projectName-war\pom.xml of [...]projectName\pom.xml does not exist
Run Code Online (Sandbox Code Playgroud)

如果从命令行使用mvn install时遇到上述错误(同样的pom可能在eclipse中工作)你必须改变你的pom.xml

而不是以下:

<modules>
        <module>../my-util</module>
        <module>../my-server</module>           
</modules>
Run Code Online (Sandbox Code Playgroud)

按照下面的内容(附在剖析器中):

<profiles>
    <profile>
        <modules>
            <module>../my-util</module>
            <module>../my-server</module>           
        </modules>
    </profile>
</profiles>
Run Code Online (Sandbox Code Playgroud)

  • 这就是解决我的问题的方法。浪费了一个多小时看其他地方。另外,如果能有一个解释就好了。 (2认同)

tma*_*wen 7

问题是:在projectName-war下面是否应该有一个pom.xml

简单地说是的.

你已经弄明白了,因为你没有向maven 提供一个项目描述符aka pom.xml,它将无法调用projectName-war一个有效的子模块.

projectName-war下必须有一个pom.xml文件,并且它必须有一个工件ID,该工件ID与声明模块的父项下的工件ID相匹配,即

<artifactId>projectName-war</artifactId>
Run Code Online (Sandbox Code Playgroud)


小智 5

当您复制并粘贴子项目时通常会出现此问题。例如,我们有如下单独的子项目

<artifactId>business-layer</artifactId> with project name as business-layer
<artifactId>service-layer</artifactId> with project name as **xyz**-layer
<modules>
        <module>business-layer</module>
        <module>**service-layer**</module>
</modules>
Run Code Online (Sandbox Code Playgroud)

初始构建期间的项目名称应与模块名称相同。这不需要添加标签,因为配置文件标签的目的是触发具有特定操作的构建