Maven的3.0的“MVN释放:执行”不喜欢一个pom.xml不在其混帐回购协议的根目录(Mave

2019-07-29 11:58发布

我有一个关于Maven,Maven的释放小插件,混帐整合,pom.xml中的问题,并具有pom.xml的公司在回购的本地副本的子目录,而不是根。

这里的设置:

  • 我有一个私人仓库的数量有限的github账户
  • 我想(我刚学)使用Maven来组织我的建立/释放
  • 我可能需要创建每git仓库很多Maven的“项目”,几个项目
  • 每个Maven项目需要“的pom.xml”来定义其特性
  • 我不能,或至少它不是方便,将所有项目的pom.xml文件在Git仓库的根
  • 所以,我最终的项目该文件夹布局:
    • git_repo_root_dir
      • project_A文件夹
        • 的pom.xml
        • other_code
      • project_B文件夹
        • 的pom.xml
        • other_code
      • 等等
      • ...
  • 我可以成功进入目录git_repo_root_dir / project_A,做一个“MVN发布:准备”
  • 我会失败,这一步git_repo_root_dir / project_A:“MVN发布:执行”
    • 这个问题似乎是git的标记代码成功签出git_repo_root_dir / project_A /目标/结算/ project_A在发布版本的准备,但后来结账后的“行家释放”插件进入目录git_repo_root_dir / project_A /目标/结帐/。 代替git_repo_root_dir / project_A /目标/结帐/ project_A /。 做实际的构建,而且也没有办法告诉“行家释放”插件试图惹的pom.xml之前踏进源的特殊标记复制的子目录
  • 问:有没有办法解决? 是否有一个选项,以某种方式告诉“MVN发布:执行”去子目录?

下面是实际的错误在这个过程中,我得到:

[INFO] --- maven-release-plugin:2.0:perform (default-cli) @ standard_parent_project ---
[INFO] Checking out the project to perform the release ...
[INFO] Executing: /bin/sh -c cd "/Users/___/DEV c8ion 01/maven_based_code/0maven/standard_parent_project/target" && git clone git@github.com:clarafaction/0maven.git '/Users/___/DEV c8ion 01/maven_based_code/0maven/standard_parent_project/target/checkout'
...
/* note, the pom.xml the build should go out of at this point is at
   '/Users/___/DEV c8ion 01/maven_based_code/0maven/standard_parent_project/target/checkout/standard_parent_project/pom.xml'
*/
...
[INFO] [ERROR] The goal you specified requires a project to execute but
    there is no POM in this directory
    (/Users/___/DEV c8ion 01/maven_based_code/0maven/standard_parent_project/target/checkout).
    Please verify you invoked Maven from the correct directory. -> [Help 1]

谢谢。

Answer 1:

这应该做的伎俩:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.3.2</version>
    <executions>
        <execution>
            <id>default</id>
            <goals>
                <goal>perform</goal>
            </goals>
            <configuration>
                <pomFileName>your_path/your_pom.xml</pomFileName>
            </configuration>
        </execution>
    </executions>
</plugin>


Answer 2:

您可以以同样的方式你通常做它告诉Maven来从POM这是其他地方运行的: -f选项。 mvn --help描述它正是如此:

-f,--file <arg>    Force the use of an alternate POM
                   file.

要做到这一点在一份新闻稿中,你只需要通过相应的选项来释放插件。 您可以使用执行目标的“论据”属性做到这一点。 这个属性只是告诉释放插件一些附加参数追加到mvn它做发布时运行命令。 你可以在命令行中通过附加设置-D arguments="-f path/to/pom"或者在发布插件的配置POM永久设置它,像

<plugin>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.3</version>
    <configuration>
        <arguments>-f path/to/pom</arguments>
    </configuration>
</plugin>


Answer 3:

的第一件事就是了解混帐它有它的惯例,每个项目都有它自己的存储库。 接下来的事情是,Maven有它的惯例,并把pom.xml中到根的它的项目是最明显的一个。 此外,您试图对Maven的斗争,我会预测,你就失去了战斗力,让你的生活并不容易。 如果您的项目A和B在某种你应该想想一个多模块构建导致在这样的结构有关(相同versio号或相同的释放时间):

root (Git Repos)
  +-- pom.xml
       +--- projectA (pom.xml)
       +--- projectB (pom.xml)

你可以做从根一个步骤都了projectA(更好地称这是一个模块)和模块B的释放。



文章来源: Maven 3.0's “mvn release:perform” doesn't like a pom.xml that isn't in its git repo's root directory