Изграждане на IntelliJ проект в TeamCity

Нов съм в IntelliJ и Java, но имам доста опит в TeamCity, най-вече в изграждането на .Net проекти.

Създадох много прост проект Android Library в IntelliJ с основно един клас, който използва RxJava (Реактивни разширения за Java). Добавих библиотеката Rx в IntelliJ с помощта на Структура на проекта -> Библиотеки -> От Maven. Действителната библиотека, която добавих, е com.netflix.rxjava:rxjava-android:0.19.6, която привлича com.netflix.rxjava:rxjava-core:0.19.6.

Това работи брилянтно и моят проект се компилира в IntelliJ, без дори да се налага да инсталирам Maven. Добра работа, JetBrains.

Въпреки това, когато се опитам да изградя проекта в TeamCity с помощта на IntelliJ-IDEA runner, проектът не се компилира. Лош 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 build runner; но проектът няма POM файл, така че не е компилация на Maven.
  • Опитах да инсталирам Maven на агента за изграждане, това изглежда няма значение и не трябваше да го инсталирам, за да може IntelliJ да работи локално, така че не виждам защо е необходимо.
  • Има макрос за пътя, наречен MAVEN_REPOSITORY в настройките на IntelliJ build runner и аз се опитах да го настроя на различни различни стойности, без успех.
  • Разгледах документацията на JetBrains за IntelliJ runner и доколкото мога да преценя, съм конфигурирал правилно моята стъпка за изграждане. Ясно е обаче, че пропускам нещо.

Всичко това е малко разочароващо, бърниках с часове, но изглежда нищо не работи и всъщност нямам представа какво правя погрешно. Сигурно съм пропуснал нещо някъде. Как мога да накарам тази компилация да работи правилно в TeamCity?


person Tim Long    schedule 19.08.2014    source източник
comment
Малко съм ръждясал в TeamCity (откакто използвам Bamboo/хостван CI), но опитахте ли все пак да използвате maven runner с POM? Също така, защо импортирате maven библиотека, но не я добавяте в POM?   -  person    schedule 19.08.2014
comment
@xTrollxDudex няма POM; това не е компилация на Maven. IntelliJ има собствена вградена интеграция на Maven, която ви позволява да добавяте библиотеки от централното хранилище на Maven, директно в IntelliJ, за самостоятелна система за проект и изграждане, което е една от причините да го намирам за привлекателен. Надявах се, че двата продукта на JetBrains могат да се интегрират по-добре, отколкото изглежда на практика. TeamCity има IntelliJ build runner, който трябва да изгражда IntelliJ проекти - имам IntelliJ проект и той не се изгражда. Може би се шегувам, но се надявах, че ще проработи.   -  person Tim Long    schedule 19.08.2014
comment
Не съм сигурен дали изпълнявате teamcity на хост зад защитна стена, която може да блокира вашите свързани с Rx* изтегляния на артефакти. Проектите на Intellij се изграждат незабавно за teamcity, ако имаме всички необходими библиотеки на нашите сървъри на зависимости, вместо извън нашата защитна стена   -  person Biswajit_86    schedule 19.08.2014
comment
@Biswajit_86 Не мисля, че това е проблем със защитната стена, но може да сте на нещо там. Проектът се опитва да изгради; просто не може да намери нито една от библиотеките. Мисля, че или трябва да ги ангажирам по някакъв начин във VCS, как да ги инсталирам предварително на агента за изграждане. Как поставяте зависимостите си в сървъра за изграждане?   -  person Tim Long    schedule 19.08.2014
comment
Имаме изрични зависимости. Така че ние декларираме всички наши зависимости в цел и ги извличаме, преди да стартираме компилации. добавяме тази папка към нашата библиотека   -  person Biswajit_86    schedule 20.08.2014
comment
Успяхте ли да накарате това да работи?   -  person mcintyre321    schedule 02.04.2015
comment
@mcintyre321 Оттогава имам много прост "ванилен" проект за изграждане, но така и не реших горното.   -  person Tim Long    schedule 03.04.2015
comment
Току-що заобиколихме това, като използвахме изрична команда за изграждане на maven. Чувствам, че в TeamCity липсва квадратче за отметка „Автоматично импортиране“, както IntelliJ има...   -  person mcintyre321    schedule 05.04.2015


Отговори (1)


От TeamCity 9.1 неговият IDEA runner вече не може да изгражда Maven модули, нито може автоматично да изтегля външни артефакти от Maven Central.

По принцип това, от което се нуждаете, е:

  1. Изтеглете външни артефакти, един по един, като използвате TeamCity Maven runner и maven-dependency-plugin, както е описано в този отговор., напр. ж.:

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

    Ще ви трябват толкова стъпки за изграждане на Maven, колкото е броят на зависимостите във вашия проект IDEA и тези стъпки трябва да предхождат стъпката за изграждане на IDEA runner.

  2. На ниво конфигурация на компилация задайте системното свойство system.path.macro.MAVEN.REPOSITORY на %env.HOME%/.m2/repository.

Това е.

Честита сграда!

person Bass    schedule 15.03.2017