如何将持续集成与Eclipse项目结合使用?

时间:2020-03-06 15:00:49  来源:igfitidea点击:

我一直在使用maven2和hudson进行持续集成,但是我发现Eclipse和Maven不能很好地配合使用。当然有一个插件,但是将Maven项目混入Eclipse所喜欢的东西是很奇怪的,并且构建时间和单元测试都太长了。
我正在考虑切换回不涉及任何蚂蚁和Maven的纯Eclipse项目。使用无限的插件和可能的JavaRebel代理,它将为我提供一个非常快速的build-deploy-test周期。但是,我仍然希望同时具有自动和测试功能,因此:

如何将持续集成与Eclipse项目结合使用?

有命令行方式吗?

是否有已经本地支持它的构建服务器?

解决方案

是的,Eclipse Maven2插件暂时无法使用。但是我建议我们坚持使用,使用Maven2有很多好处,因此它实际上可以平衡。

我们要做的是,我们使用Eclipse进行开发,而仅使用Maven来管理依赖项。其他所有操作都通过在命令行上运行" mvn"来完成。我们将测试保存在自己的集成测试项目(...- itest)中,并具有连续的集成服务器以分两个阶段进行构建,首先构建实际代码,然后通过构建并运行-itest项目。 (首次通过(纯构建)通常非常快,而集成测试的构建(运行测试)通常需要一段时间。)

这是使mvn运行测试的命令行:
mvn -o verify -Ditest`

当然,我们需要在父pom中定义" estest"配置文件:
像这样说:

<profiles>
  <profile>
    <id>integration-test</id>
    <activation>
      <property>
        <name>itest</name>
      </property>
    </activation>
    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <executions>
            <execution>
              <id>itest</id>
            </execution>
          </executions>
          <configuration>
            <testSourceDirectory>src/main</testSourceDirectory>
            <testClassesDirectory>target/classes</testClassesDirectory>
            <forkMode>once</forkMode>
          </configuration>
        </plugin>
      </plugins>
    </build>
  </profile>
</profiles>

将Eclipse + Ant与CruiseControl一起使用时,我取得了相当大的成功。如果我们想要自动化,则可能不仅需要纯Eclipse,还需要更多。

CruiseControl可以从源代码管理中自动签出项目的副本,进行构建,运行测试,然后使用结果更新Web应用程序。我上次使用它的过程非常漂亮,但是那是很久以前了。

我设法找到了一个好的解决方案。当使用maven和eclipse时,我只是获得了无穷大(可以从Eclipse市场安装)的工作

在Eclipse-> Project Properties-> Java Build Path-> Source中,取消选中名为"允许输出"的框
源文件夹的文件夹"

这将使项目具有多个输出路径,然后Eclipse将开始将测试类报告为类路径的一部分。现在,Infinitest会找到它并开始运行测试!

我所做的只是使用Maven Eclipse官方插件并将其添加到我的POM中。

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.5</version>
        <!-- <scope>provided</scope> -->
    </dependency>

    <dependency>
        <groupId>org.infinitest</groupId>
        <artifactId>infinitest</artifactId>
        <scope>test</scope>
        <version>4.0</version>
    </dependency>

</dependencies>