java - 在 TeamCity 中构建 IntelliJ 项目

标签 java maven intellij-idea teamcity

我是 IntelliJ 和 Java 新手,但我有相当多的 TeamCity 经验,主要是构建 .Net 项目。

我在 IntelliJ 中创建了一个非常简单的 Android Library 项目,基本上只有一个使用 RxJava 的类 ( Reactive Extensions for Java )。我已使用 项目结构 -> -> 来自 Maven 在 IntelliJ 中添加了 Rx 库。我添加的实际库是 com.netflix.rxjava:rxjava-android:0.19.6 ,它引入了 com.netflix.rxjava:rxjava-core:0.19.6 。

这非常有效,我的项目可以在 IntelliJ 中编译,甚至无需安装 Maven。干得好,JetBrains。

但是,当我尝试使用 IntelliJ-IDEA 运行程序在 TeamCity 中构建项目时,该项目无法编译。糟糕的 JetBrains!

我在所有对 rx.* 的引用上都遇到错误,正如我所说,它们在我的工作站上运行得很好。来自 TeamCity 的错误如下所示:

C:\BuildAgent\work\eefd62e2c3082b56\src\com\example\TigraAndroidUtilities\ObservableModel.java:3: package rx does not exist  
import rx.Observable;  
         ^  
C:\BuildAgent\work\eefd62e2c3082b56\src\com\example\TigraAndroidUtilities\ObservableModel.java:4:   package rx.subjects does not exist  
import rx.subjects.BehaviorSubject;  
                  ^  
C:\BuildAgent\work\eefd62e2c3082b56\src\com\example\TigraAndroidUtilities\ObservableModel.java:18:   cannot find symbol  
  symbol:   class BehaviorSubject  
  location: class com.example.TigraAndroidUtilities.ObservableModel  
    private BehaviorSubject modelStream;  
            ^  
C:\BuildAgent\work\eefd62e2c3082b56\src\com\example\TigraAndroidUtilities\ObservableModel.java:63:   cannot find symbol  
  symbol:   class Observable  
  location: class com.example.TigraAndroidUtilities.ObservableModel  
    public Observable toObservable()  
           ^  
C:\BuildAgent\work\eefd62e2c3082b56\src\com\example\TigraAndroidUtilities\ObservableModel.java:28:   cannot find symbol  
  symbol:   variable BehaviorSubject  
  location: class com.example.TigraAndroidUtilities.ObservableModel  
        modelStream = BehaviorSubject.create(modelData);  
                      ^  
C:\BuildAgent\work\eefd62e2c3082b56\src\com\example\TigraAndroidUtilities\ObservableModel.java:65:   cannot find symbol  
  symbol:   variable Observable  
  location: class com.example.TigraAndroidUtilities.ObservableModel  
        if (completed) { return Observable.empty(); } 
                                ^   

这是我尝试过的:

  • 考虑使用 Maven 构建运行器来代替;但该项目没有 POM 文件,因此它不是 Maven 构建。
  • 我尝试在构建代理上安装 Maven,这似乎没有任何区别,而且我不需要安装它即可让 IntelliJ 在本地工作,所以我不明白为什么需要它。
  • IntelliJ 构建运行程序设置中有一个名为 MAVEN_REPOSITORY 的路径宏,我尝试将其设置为各种不同的值,但没有成功。
  • 我已经查看了 JetBrains 的 IntelliJ 运行程序文档,据我所知,我已经正确配置了构建步骤。显然我错过了一些东西。

这有点令人沮丧,我已经修改了几个小时,但似乎没有任何效果,基本上我不知道我做错了什么。我一定是在某个地方错过了什么。我怎样才能让这个构建在 TeamCity 中正常工作?

最佳答案

TeamCity 9.1 开始,其 IDEA 运行程序无法再构建 Maven 模块,也无法从 Maven Central 自动下载外部 Artifact 。

基本上,您需要的是:

  1. 使用 TeamCity Maven 运行程序 maven-dependency-plugin 逐一下载外部 Artifact ,如 this 中所述。答案., e.例如:

    mvn org.apache.maven.plugins:maven-dependency-plugin:3.0.0:get com.netflix.rxjava:rxjava-android:0.19.6
    

    您将需要与 IDEA 项目中的依赖项数量一样多的 Maven 构建步骤,并且这些步骤必须先于 IDEA 运行程序构建步骤。

  2. 在构建配置级别,将 system.path.macro.MAVEN.REPOSITORY 系统属性设置为 %env.HOME%/.m2/repository

就是这样。

祝您构建愉快!

关于java - 在 TeamCity 中构建 IntelliJ 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25374568/

相关文章:

java - 如何在 JDBC 中创建断言?

maven - 找出jar来自哪个maven存储库

java - 如何从 intellij 项目 View 中隐藏不必要的文件?

java - IntelliJ JDK 16 Early Access - 成功了吗?工具.jar

java - 使用随机物体模拟 2 个骰子,直到掷出 2 或 12

java - Jersey @PreMatching 和 1 个提供商中的名称绑定(bind)

java - 现实世界中的 Clojure 和 Java 互操作

Maven 和 Jenkins - 'mvn' 未被识别为内部或外部命令,

intellij-idea - 在IntelliJ中复制粘贴时如何导入类?

java - 如何使用 JPA native 查询将 List<Object> 转换为 POJO