结帐后Maven构建项目

时间:2017-10-10 22:27:25

标签: maven svn pom.xml

首先,我是maven的新手,我并不是很了解它的许多概念,所以我对任何noob错误道歉。

我正在开展一个项目,我从本地svn存储库中检出一个分支,其项目都是maven项目。其中一个项目有一个pom.xml文件,当我调用project.ear时,会将所有其他项目编译成mvn package文件。

我需要做的是能够创建一个外部pom.xml文件来检查分支,然后在最近获得的项目中调用pom.xml。像这样的东西(伪代码):

checkout branch_url checkoutDir=src
mvn src/project-with-pom/pom.xml package

我已经使用scm插件进行结帐(scm:checkout),但我似乎无法弄清楚如何在结帐后调用内部pom.xml文件。

我尝试使用调用程序插件,但我不认为它的目的总是给我以下内容:

  

没有选择任何项目来执行。

调用

<!-- scm:checkout plugin -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-invoker-plugin</artifactId>
    <version>3.0.1</version>
    <configuration>
        <setupIncludes>
            <setupInclude>${basedir}/src/project-with-pom/pom.xml</setupInclude>
        </setupIncludes>
        <pomIncludes>
            <pomInclude>*/pom.xml</pomInclude>
        </pomIncludes>
    </configuration>
    <executions>
        <execution>
            <id>create_ear_file</id>
            <goals>
                <goal>package</goal>
            </goals>
        </execution>
    </executions>
</plugin>

我也尝试过使用scm:bootstrap,但在结帐完成后我总是收到以下错误:

  

由于之前的失败,该项目已被禁止使用。

SCM:自举

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-scm-plugin</artifactId>
    <version>1.9.5</version>
    <configuration>
        <username>user</username>
        <password>pass</password>
        <connectionType>connection</connectionType>
        <scmVersion>branch_name</scmVersion>
        <scmVersionType>branch</scmVersionType>
        <checkoutDirectory>${basedir}/src</checkoutDirectory>
        <workingDirectory>${basedir}</workingDirectory>
        <pushChanges>false</pushChanges>
        <goals>package</goals>
        <goalsDirectory>/src/project-with-pom</goalsDirectory>
        <includes>POM.xml</includes>
    </configuration>
</plugin>

我也尝试使用模块,但由于模块文件不存在,它总是给我一个错误。我尝试使用配置文件,但没有。

有办法做到这一点吗?

另外,在旁注中,有没有办法避免使用纯文本作为svn的密码?

修改

猜猜我不是那么清楚。我会尝试改写它。

我的最终目标是通过单个maven命令提取和构建一组干净的项目。如果我使用Subversive并签出一个分支,我可以使用maven从所述分支编译一个.EAR文件,没有任何问题。但我想要做的是使用scm:checkout而不是Subversive,然后在一个maven命令中构建项目。

执行类似于:

mvn scm:checkout -DcheckoutDirectory=src & mvn package -f src/project-with-pom/pom.xml

我尝试使用多模块方法但似乎maven首先构建子模块然后构建父模块,因此我得到“child not not exists”错误。我需要父模块首先执行checkout命令,然后构建checkout目录中的子模块。

1 个答案:

答案 0 :(得分:0)

您可以使用-f参数

使用不同的pom文件调用Maven

bug

但实际上,我并不完全理解您的请求(或您的项目结构):每个Maven项目都有一个pom.xml。如果子目录中有POM,则表示您有一个多模块项目。没有POM,你就无法拥有Maven项目。