Конфигурирование Perforce scm в проекте maven для получения последнего списка изменений
Я переношу проект в Maven, и поскольку мы всегда использовали ссылки на наши сборки по последнему номеру изменения в нашем репозитории Perforce SCM, я хотел бы иметь возможность извлечь эту информацию
Я пытаюсь настроить плагин Maven scm через следующие ресурсы:
- http://maven.apache.org/scm/maven-scm-plugin/usage.html для общего использования
- http://www.perforce.com/perforce/doc.current/manuals/p4maven/index.html
Во-первых, я не понимаю, как заставить это работать, поэтому, если у кого-то есть полностью рабочий пример, я буду рад, со своей стороны, я попытался добавить в мой pom:
<scm>
<connection>
scm:perforce:localhost:1666://depot/
<my_project>
/
<version>
</connection>
<developerConnection>
scm:perforce:localhost:1666:/depot/
<my_project>
/
<version>
</developerConnection>
<url>http://somerepository.com/view.cvs</url>
</scm>
...
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-scm-plugin</artifactId>
<version>1.6</version>
<dependencies>
<!-- P4Maven -->
<dependency>
<groupId>com.perforce</groupId>
<artifactId>p4maven</artifactId>
<version>[2011,2012)</version>
</dependency>
</dependencies>
<configuration>
<connectionType>//depot/proto/kernel/kernel/04.00/maven2</connectionType>
<username>my local username</username>
<password>xxxxxx</password>
<includes>**</includes>
</configuration>
</plugin>
</plugins>
это приводит меня к:
[INFO] --- maven-scm-plugin:1.6:checkout (default-cli) @ kernel ---
mars 27, 2012 9:54:08 AM org.sonatype.guice.bean.reflect.Logs$JULSink warn
Avertissement: Error injecting: org.apache.maven.scm.provider.svn.svnexe.SvnExeScmProvider
java.lang.NoClassDefFoundError: org/apache/maven/scm/command/info/InfoScmResult
Наверняка что-то забыл, попробую еще раз прочитать инструкцию и посмотреть, что мне не хватает, но если кто-нибудь знает...
Во всяком случае, мой вопрос довольно: стоит ли попробовать это? В доступных действиях плагина scm я не вижу ничего, что помогло бы мне получить информацию о последних изменениях и интегрировать ее в справочный номер сборки. Должен ли я разработать свой собственный плагин для этого?
Заранее спасибо.
4 ответа
Я получил совет от одного из разработчиков P4Maven, который может помочь.
Сначала проверьте свою конфигурацию. Тег "..." в теге "" должен быть одним из имен тега в теге "" (т. Е. "Connection" или "developerConnection")
Существует два варианта использования Maven с Perforce SCM.
Использовать стандартный (встроенный) поставщик Maven Perforce SCM (на основе командной строки p4)
- Обратите внимание, что вам понадобится установленный исполняемый файл командной строки p4
- Вы можете установить имя пользователя и пароль, используя переменные окружения или аргументы JVM
[переменные окружения] P4CLIENT= P4USER= P4PASSWD=
или же
[JVM args] -Dusername = -Dpassword =
[pom.xml]...
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-scm-plugin</artifactId>
<version>1.4</version>
</plugin>
...
...
<!-- SCM Settings -->
<scm>
<connection>scmerforce:localhost:1666://depot/someproject</connection>
<developerConnection>scmerforce:localhost:1666://depot/someproject</developerConnection>
<url>scmerforce://depot/simple</url>
</scm>
...
- Используйте провайдера P4Maven Perforce SCM (на основе P4Java)
[Pom.xml]
...
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-scm-plugin</artifactId>
<version>1.4</version>
<dependencies>
<!-- P4Maven -->
<dependency>
<groupId>com.perforce</groupId>
<artifactId>p4maven</artifactId>
<version>[2011,2012)</version>
</dependency>
</dependencies>
<configuration>
<connectionType>connection</connectionType>
<username>someuser</username>
<password>somepassword</password>
<includes>**</includes>
</configuration>
</plugin>
...
...
scm4: localhost: 1666: // депо /someproject scm4:localhost:1666:// депо /someproject scm4:// депо / someproject
...
Обратите внимание, что для P4Maven мы переопределяем поставщика по умолчанию внутри плагина "maven-scm-plugin".
Обратите внимание, что мы используем "scmp4" (если используется P4Maven) вместо "scmperforce" (встроенный по умолчанию) в качестве имени провайдера, поскольку "спектакль" принимается существующей реализацией по умолчанию.
Недавно я боролся с точно такой же проблемой - я просто хотел получить номер ревизии Perforce, чтобы использовать его в артефактах maven (например, как часть имени). Я проверил http://mojo.codehaus.org/buildnumber-maven-plugin/, но он вообще не поддерживает Perforce. Я также попробовал maven-release-plugin, но мне кажется, что он делает слишком много, и я даже не узнал, будет ли он делать то, что мне нужно.
В любом случае я получил решение, которое мне не нравится, но оно работает. Я получаю этот номер ревизии напрямую с помощью исполняемого файла p4 через плагин ant и antrun (вы должны использовать последнюю версию 1.7 для экспорта свойства ant в maven). Вам также необходимо иметь исполняемый файл p4.
После использования этой конфигурации плагина у вас есть ${revision.number}, доступный в maven.
<!-- Get Perforce latest change number -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<dependencies>
<dependency>
<groupId>ant-contrib</groupId>
<artifactId>ant-contrib</artifactId>
<version>1.0b3</version>
</dependency>
</dependencies>
<configuration>
<exportAntProperties>true</exportAntProperties>
</configuration>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="maven.plugin.classpath"/>
<!-- Login to p4 -->
<exec executable="p4" inputstring="${p4.password}">
<arg value="-p${p4.server}"/>
<arg value="-c${p4.client}"/>
<arg value="-u${p4.username}"/>
<arg value="login"/>
</exec>
<!-- Get reivision description text -->
<exec executable="p4" outputproperty="revision.description">
<arg value="-p${p4.server}"/>
<arg value="-c${p4.client}"/>
<arg value="-u${p4.username}"/>
<arg value="changes"/>
<arg value="-m1"/>
<arg value="//...#have"/>
</exec>
<!-- Logout from p4 -->
<exec executable="p4">
<arg value="-p${p4.server}"/>
<arg value="-c${p4.client}"/>
<arg value="-u${p4.username}"/>
<arg value="logout"/>
</exec>
<!-- Parse revision description to retrieve only revision number -->
<propertyregex property="revision.number"
input="${revision.description}"
regexp="Change ([0-9]*) on ([a-z,0-9]*)"
select="\1"
casesensitive="false"/>
<echo>Perforce latest revision number: ${revision.number}</echo>
</target>
</configuration>
</execution>
</executions>
</plugin>
Я приземлился здесь во время поиска решения аналогичной проблемы "НЕТ конфигурации может быть определена", с которой я столкнулся с клиентом Code Collaborator с P4. В итоге я удалил P4-клиент и переустановил его, чтобы он заработал.
Прошло несколько лет с тех пор, как вопрос был задан, но в промежутке p4maven был переписан, и обновленную документацию поразительно трудно найти.
Вот новый README.md. Я проследил за этим, и все работает. На данный момент 1.0.6 является последней версией в Maven Central.
Я обнаружил источник по ссылке на странице плагина номера сборки Maven.