Конфигурирование Perforce scm в проекте maven для получения последнего списка изменений - PullRequest
6 голосов
/ 27 марта 2012

Я переношу проект в Maven, и, поскольку мы всегда использовали ссылки на наши сборки по последнему номеру изменения в нашем репозитории Perforce SCM, я хотел бы иметь возможность извлечь эту информацию

Я пытаюсь настроить плагин Maven scm через следующие ресурсы:

Во-первых, я не понимаю, как заставить это работать, поэтому, если у кого-то есть полностью рабочий пример, я буду рад, со своей стороны, я попытался добавить в мой 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 ]

2 голосов
/ 28 марта 2012

Я получил несколько советов от одного из разработчиков P4Maven, которые могут помочь.

Сначала проверьте свою конфигурацию."..." в теге "" должно быть одним из имен тега в теге "" (т. Е. "Connection" или "developerConnection")

Существует два варианта использования Maven с Perforce SCM.

  1. Использование стандартного (встроенного) провайдера 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 (на основе 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» (встроенный по умолчанию) в качестве имени провайдера, поскольку «спектакль» принимается существующей реализацией по умолчанию.

1 голос
/ 26 апреля 2012

Недавно я боролся с точно такой же проблемой - я просто хотел получить номер ревизии Perforce, чтобы использовать его в артефактах maven (например, как часть имени).Я проверил 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>
0 голосов
/ 13 июля 2016

Я приземлился здесь во время поиска решения аналогичной проблемы «НЕТ конфигурации может быть определена», с которой я столкнулся с клиентом Code Collaborator с P4.В итоге я удалил P4-клиент и переустановил его, чтобы он заработал.

0 голосов
/ 02 июня 2016

Прошло несколько лет с тех пор, как вопрос был задан, но в промежутке p4maven был переписан, и обновленную документацию поразительно трудно найти.

Вот новый README.md .Я проследил за этим, и все работает.На данный момент 1.0.6 является последней версией maven central .

Я обнаружил источник по ссылке на странице плагина номера сборки Maven.

...