2015-06-02 3 views
3

Что я хочу сделать, когда я запускаю команду «mvn install» Мне нужен плагин для выполнения. В частности, мне нужен плагин сонара, который будет проверяться, есть ли какие-либо критические проблемы в проекте. Если есть, сборка завершится неудачей.Как связать выполнение плагина maven с моментальными версиями проекта?

Однако, я хочу, чтобы этот плагин исполнялся только на ветке разработки. Версия проекта по отрасли развития выглядит следующим образом: 1.0.5-SNAPSHOT. Версия проекта на главной ветке: 1.0.5

Итак, как мне запустить плагин только на ветке разработки? Я подумал, что я мог бы сделать это на основе версии (только снимок), но я не уверен, что это возможно.

+0

Это работа для решения CI, такого как Дженкинс. Там вы можете настроить сканирование Sonar отдельно от вашей сборки maven. – khmarbaise

+0

Дело в том, что мы хотели бы интегрировать его в сборку, чтобы сборка на CI и на машине локального разработчика была одинаковой. Как я уже сказал, мы хотим провалить сборку maven, если будут найдены критические проблемы сонара. Это может быть очень неприятно для разработчиков, когда сборка на локальной машине работает, и не работает на CI. – Ievgen

ответ

1

То, что вы пытаетесь сделать, не поддерживается из коробки - плагин не может автоматически запускаться на основе вашего проекта <version/>. (Ну, это не совсем так, но вы должны быть автором плагина и писать свою собственную логику для этого, если хотите, но это применимо только к вашему плагину).

Что я хотел бы предложить, это создать профиль Maven и вызвать его с помощью переменной командной строки (-DmyParam) или указав имя профиля (-PmyDevProfile).

Взгляните на следующие ссылки, чтобы получить лучшее представление о профилях Maven:

+0

Да, это сработало бы. Однако таким образом мы должны были бы указывать профиль каждый раз, когда мы строим проект, но я хотел бы, чтобы он был интегрирован в сборку, так что разработчикам не нужно знать о имя профиля – Ievgen

+0

Я имел дело с Maven, так как это очень ранние дни. На данный момент другого пути нет. Для этого были разработаны профили Maven. Их внутренняя работа не совсем удобна в довольно многих обычных случаях, но я не думаю, что у вас действительно лучший вариант. – carlspring

1

I т hink вы можете добиться такого поведения следующим образом. Сначала добавьте плагин build-helper-maven-plugin к своей сборке (в начале).

<build> 
    <plugins> 
    <plugin> 
    <groupId>org.codehaus.mojo</groupId> 
     <artifactId>build-helper-maven-plugin</artifactId> 
     <version>1.10</version> 
     <executions> 
     <execution> 
      <id>bsh-property</id> 
      <goals> 
      <goal>bsh-property</goal> 
      </goals> 
      <configuration> 
      <properties> 
       <property>skip.sonar</property> 
      </properties> 
      <source>skip.sonar = project.getVersion().endsWith("-SNAPSHOT") ? false : true;</source> 
      </configuration> 
     </execution> 
    </executions> 
    </plugin> 
</plugins> 

BSH-свойство цели выполняет Beanshell скрипт, который определяет свойство skip.sonar с истинным или ложным в зависимости, есть ли у вас версия снимка в конце или нет.

Тогда вы можете использовать свойство пропуска для сонарного плагина maven.

<build> 
    <plugins> 
     <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>sonar-maven-plugin</artifactId> 
     <version>2.7.1</version> 
     <executions> 
      <execution> 
      ... 
      <configuration> 
      <skip>${skip.sonar}</skip> 
      </configuration> 
     </plugin> 
    </plugins> 
    </build> 
+0

Спасибо, что это решение сработало для меня. –

Смежные вопросы