如何在多模块maven项目中单独构建模块?

dba5bblo  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(525)

遵循maven官方文档中的maven ci友好文章,创建了这个多模块项目(最小示例)。
有三个模块和一个根项目(inception):

/inception
  /modules
    /base     (common parent of 'core' and 'facade')
    /core     (child of 'base')
    /facade   (child of 'base' having 'core' as a dependency)

执行 mvn packageinception 按预期工作-全部3个 *.jar 在相应的 target 福尔德斯。
我想选择建造 facade 模块分开。不幸的是, mvn packagemodules/facade 无法收集依赖项,并且失败并出现错误

[ERROR] Failed to execute goal on project sample-facade:
        Could not resolve dependencies for project sample.group:sample-facade:jar:0.0.1:
        Failed to collect dependencies at sample.group:sample-core:jar:0.0.1: 
        Failed to read artifact descriptor for sample.group:sample-core:jar:0.0.1:
        Could not transfer artifact sample.group:sample-base:pom:${revision}

表面问题是 ${revision} 没有被分解成 0.0.1 .
你能帮我解决这个问题吗?

ecr0jaav

ecr0jaav1#

这个 flatten-maven-plugin 解决问题。感谢@khmarbaise,他在评论中提出建议,把文件读到最后。
将插件添加到 /modules/base/pom.xml 解决了单独构建子模块的问题:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>flatten-maven-plugin</artifactId>
    <version>1.2.5</version>
    <configuration>
      <updatePomFile>true</updatePomFile>
      <flattenMode>resolveCiFriendliesOnly</flattenMode>
    </configuration>
    <executions>
      <execution>
        <id>flatten</id>
        <phase>process-resources</phase>
        <goals>
          <goal>flatten</goal>
        </goals>
      </execution>
      <execution>
        <id>flatten.clean</id>
        <phase>clean</phase>
        <goals>
          <goal>clean</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

在上开始阶段之前 facade 模块,要求有 base 以及 core 在本地存储库中,这样maven就可以找到工件。因此,下面是根目录中的操作顺序: mvn install -pl modules/base,modules/core (或者只是 mvn install ) mvn package -pl modules/facade

z9smfwbn

z9smfwbn2#

我想你在找
mvn -pl 选项。
以下是此选项的定义 mvn -help :
-pl,--projects以逗号分隔的要生成的指定React堆项目列表,而不是所有项目。项目可以由[groupid]:artifactid或其相对路径指定。
所以解决方法是使用 mvn -pl groupId:artifactId package 或者 mvn -pl /facade package

相关问题