2

我有一个 Maven 插件,我想针对不同的 Maven 版本进行测试(例如:2.2.1 和 3.0.4)。理想情况下,我不希望运行构建的用户必须手动安装这些确切的版本。

是否可以从 Maven Central 或其他一些源安装特定版本的 Maven,然后将它们缓存在本地 Maven 存储库中以供后续构建?

4

3 回答 3

1

为什么不简单地安装一个持续集成 (CI) 服务器,例如 Jenkins / Hudson / TeamCity / 等?CI 服务器允许您针对不同版本的 SDK 运行构建。

如果您的插件是 OSS(并且在 GitHub 上),我相信您可以从Cloudbees获得免费的 Jenkins 托管。

无法从 Maven Central 下载 Maven 本身。您只能从他们的网站下载它。

于 2012-06-26T14:40:37.747 回答
1

Maven 发行版存储在 Maven 中央存储库中,如您在此处看到的:

因此,它可以用作具有以下坐标的正常依赖项:

tar.gz 变体:

<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>apache-maven</artifactId>
    <version>3.0.4</version>
    <classifier>bin</classifier>
    <type>tar.gz</type>
</dependency>

zip 变体:

<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>apache-maven</artifactId>
    <version>3.0.4</version>
    <classifier>bin</classifier>
    <type>zip</type>
</dependency>

其余部分非常标准 - 您可能会在集成测试 pom 中使用它,并按照@khmarbaise 的推荐使用maven-invoker-plugin调用它们。

于 2012-11-06T22:48:37.343 回答
0

您可以执行以下操作:

   <profile>
      <id>run-its</id>
      <build>
        <!--  Download the different Maven versions -->
        <plugins>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>wagon-maven-plugin</artifactId>
            <version>1.0-beta-3</version>
            <executions>
              <execution>
                <id>download-maven-2.0.11</id>
                <phase>prepare-package</phase>
                <goals>
                  <goal>download-single</goal>
                </goals>
                <configuration>
                  <url>http://archive.apache.org/dist/maven/binaries/</url>
                  <fromFile>apache-maven-2.0.11-bin.tar.gz</fromFile>
                  <toDir>${project.build.directory}/maven/download/</toDir>
                </configuration>
              </execution>
              <execution>
                <id>download-maven-2.2.1</id>
                <phase>prepare-package</phase>
                <goals>
                  <goal>download-single</goal>
                </goals>
                <configuration>
                  <url>http://archive.apache.org/dist/maven/binaries/</url>
                  <fromFile>apache-maven-2.2.1-bin.tar.gz</fromFile>
                  <toDir>${project.build.directory}/maven/download/</toDir>
                </configuration>
              </execution>
              <execution>
                <id>download-maven-3.0.3</id>
                <phase>prepare-package</phase>
                <goals>
                  <goal>download-single</goal>
                </goals>
                <configuration>
                  <url>http://archive.apache.org/dist/maven/binaries/</url>
                  <fromFile>apache-maven-3.0.3-bin.tar.gz</fromFile>
                  <toDir>${project.build.directory}/maven/download/</toDir>
                </configuration>
              </execution>
            </executions>
          </plugin>


          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>truezip-maven-plugin</artifactId>
            <version>1.0-beta-4</version>
            <executions>
              <execution>
                <id>extract-maven-2.0.11</id>
                <goals>
                  <goal>copy</goal>
                </goals>
                <phase>prepare-package</phase>
                <configuration>
                  <fileset>
                    <directory>${project.build.directory}/maven/download/apache-maven-2.0.11-bin.tar.gz</directory>
                    <outputDirectory>${project.build.directory}/maven/tools/</outputDirectory>
                  </fileset>
                </configuration>
              </execution>
              <execution>
                <id>extract-maven-2.2.1</id>
                <goals>
                  <goal>copy</goal>
                </goals>
                <phase>prepare-package</phase>
                <configuration>
                  <fileset>
                    <directory>${project.build.directory}/maven/download/apache-maven-2.2.1-bin.tar.gz</directory>
                    <outputDirectory>${project.build.directory}/maven/tools/</outputDirectory>
                  </fileset>
                </configuration>
              </execution>
              <execution>
                <id>extract-maven-3.0.3</id>
                <goals>
                  <goal>copy</goal>
                </goals>
                <phase>prepare-package</phase>
                <configuration>
                  <fileset>
                    <directory>${project.build.directory}/maven/download/apache-maven-3.0.3-bin.tar.gz</directory>
                    <outputDirectory>${project.build.directory}/maven/tools/</outputDirectory>
                  </fileset>
                </configuration>
              </execution>
            </executions>
          </plugin>

          <!--
            This is currently needed due to a bug of the truezip-plugin cause it unpacks without permission!
            see http://jira.codehaus.org/browse/MOJO-1796
           -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.7</version>
            <executions>
                <execution>
                  <id>chmod-files</id>
                  <phase>package</phase>
                  <goals>
                    <goal>run</goal>
                  </goals>
                  <configuration>
                    <target>
                      <chmod file="${project.build.directory}/maven/tools/apache-maven-2.0.11/bin/mvn" perm="+x"/>
                      <chmod file="${project.build.directory}/maven/tools/apache-maven-2.2.1/bin/mvn" perm="+x"/>
                      <chmod file="${project.build.directory}/maven/tools/apache-maven-3.0.3/bin/mvn" perm="+x"/>
                    </target>
                  </configuration>
                </execution>
              </executions>
          </plugin>

          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-invoker-plugin</artifactId>
            <version>1.5</version>
            <dependencies>
              <dependency>
                <groupId>org.codehaus.groovy</groupId>
                <artifactId>groovy</artifactId>
                <version>1.8.4</version>
              </dependency>
            </dependencies>
            <configuration>
              <debug>false</debug>
                  <!-- src/it-ip as for integration tests invoker plugin for the time of transition to maven-invoker-plugin -->
              <projectsDirectory>src/it</projectsDirectory>
              <showVersion>true</showVersion>
              <pomIncludes>
                <pomInclude>*/pom.xml</pomInclude>
              </pomIncludes>
              <preBuildHookScript>setup</preBuildHookScript>
              <postBuildHookScript>verify</postBuildHookScript>
              <settingsFile>src/it/settings.xml</settingsFile>
            </configuration>
            <executions>
              <execution>
                <id>integration-test-maven-2.0.11</id>
                <goals>
                  <goal>install</goal>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <reportsDirectory>${project.build.directory}/invoker-reports-2.0.11</reportsDirectory>
                  <localRepositoryPath>${project.build.directory}/local-repo-2.0.11</localRepositoryPath>
                  <cloneProjectsTo>${project.build.directory}/it-2.0.11</cloneProjectsTo>
                  <mavenHome>${project.build.directory}/maven/tools/apache-maven-2.0.11</mavenHome>
                  <goals>
                    <goal>clean</goal>
                    <goal>test</goal>
                  </goals>
                </configuration>
              </execution>
              <execution>
                <id>integration-test-maven-2.2.1</id>
                <goals>
                  <goal>install</goal>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <reportsDirectory>${project.build.directory}/invoker-reports-2.2.1</reportsDirectory>
                  <localRepositoryPath>${project.build.directory}/local-repo-2.2.1</localRepositoryPath>
                  <cloneProjectsTo>${project.build.directory}/it-2.2.1</cloneProjectsTo>
                  <mavenHome>${project.build.directory}/maven/tools/apache-maven-2.2.1</mavenHome>
                  <goals>
                    <goal>clean</goal>
                    <goal>test</goal>
                  </goals>
                </configuration>
              </execution>
              <execution>
                <id>integration-test-maven-3.0.3</id>
                <goals>
                  <goal>install</goal>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <reportsDirectory>${project.build.directory}/invoker-reports-3.0.3</reportsDirectory>
                  <localRepositoryPath>${project.build.directory}/local-repo-3.0.3</localRepositoryPath>
                  <cloneProjectsTo>${project.build.directory}/it-3.0.3</cloneProjectsTo>
                  <mavenHome>${project.build.directory}/maven/tools/apache-maven-3.0.3</mavenHome>
                  <goals>
                    <goal>clean</goal>
                    <goal>test</goal>
                  </goals>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

这将下载不同的 Maven 版本,解压缩 .tar.gz 档案并使 mvn 可执行,并使用maven-invoker-plugin运行所有与这些不同 maven 版本的集成测试。

我不能推荐。更好的方法是使用包含不同 Maven 安装的 CI 解决方案(如前所述)。您可以分别为每个 Maven 版本运行集成测试。

于 2012-06-26T19:10:33.793 回答