Проблема с созданием сборки - PullRequest
8 голосов
/ 05 октября 2009

В моем проекте я создаю много сборок (4-5), и они выводятся в target.1 / 2 из этих сборок не принимают своих окончательных имен (или идентификаторов сборок), а в соответствии с форматом artifactID-version .jar .. Это очень запутанно Почему это так?

Выдержки из моего pom.xml -

<project xmlns="http://maven.apache.org/POM/4.0.0" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.apple</groupId>
  <artifactId>maven</artifactId>
  <name>maven_XX</name>
  <version>0.0.1-SNAPSHOT</version>  


  <build>
    <plugins>
    <!-- Added to avoid the compilation issue wrt Annotations -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.4.2</version>
        <configuration>
          <skip>true</skip>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.2-beta-4</version>
        <executions>              
          <execution>
            <id>clientjar</id>
            <phase>compile</phase>
            <goals>
              <goal>single</goal>
            </goals>
            <configuration>
              <finalName>XX_client</finalName>
              <appendAssemblyId>false</appendAssemblyId>
              <descriptors>
                <descriptor>
                  ${basedir}/src/main/resources/assemblies/clientjar.xml
                </descriptor>
              </descriptors>
            </configuration>
          </execution>
          <execution>
            <id>11***</id>
            <phase>compile</phase>
            <goals>
              <goal>single</goal>
            </goals>
            <configuration>
              <finalName>11server</finalName>
              <appendAssemblyId>false</appendAssemblyId>
              <descriptors>
                <descriptor>
                  ${basedir}/src/main/resources/assemblies/11server.xml
                </descriptor>
              </descriptors>
              <outputDirectory>assemblies-target</outputDirectory>
            </configuration>
          </execution>
          <execution>
            <id>cache</id>
            <phase>compile</phase>
            <goals>
              <goal>single</goal>
            </goals>
            <configuration>
              <finalName>cache</finalName>
              <appendAssemblyId>false</appendAssemblyId>
              <descriptors>
                <descriptor>
                 ${basedir}/src/main/resources/assemblies/cache.xml
              </descriptor>
              </descriptors>
              <outputDirectory>assemblies-target</outputDirectory>
            </configuration>
          </execution>

Ответы [ 2 ]

14 голосов
/ 09 октября 2012

Потянув комментарий Lyle к уровню вопроса, чтобы обеспечить видимость.

Хотя предыдущий ответ работает Лайл указывает, что:

Если я правильно понимаю, кажется, что это несколько инвазивный обходной путь для ошибки в плагине сборки. Вместо этого попробуйте установить false в конфигурации. См .: MASSEMBLY-352

Для артефактов, которые не прикреплены к дистрибутиву репозитория, это прекрасное решение и хорошо сработало для меня.

...
<appendAssemblyId>false</appendAssemblyId>
<attach>false</attach>
...
8 голосов
/ 05 октября 2009

Когда вы запускаете сборку, вы видите что-то вроде этого вывода на консоль Maven?:

[INFO] [assembly:single {execution: 11***}]
[INFO] Reading assembly descriptor: C:\test\test-parent2/src/main/resources/assemblies/11server.xml
[INFO] Building jar: C:\test\test-parent2\assemblies-target\11server.jar
[WARNING] Configuration options: 'appendAssemblyId' is set to false, and 'classifier' is missing.
Instead of attaching the assembly file: C:\test\test-parent2\assemblies-target\11server.jar, it will become the file for
 main project artifact.
NOTE: If multiple descriptors or descriptor-formats are provided for this project, the value of this file will be non-de
terministic!

Это происходит потому, что во всех ваших сборках указано <appendAssemblyId>false</appendAssemblyId>, а классификатор не указан. Классификатор устарел в версии 2.2-бета-4, поэтому в любом случае игнорируется, это ошибка / особенность в плагине.
В результате Maven всегда делает одну из сборок «основным» артефактом для упаковки jar, а вы не видите его в каталоге target-сборки.

Чтобы обойти это, вы можете указать, что ваш проект имеет pom упаковку, а затем связать цели для жизненного цикла фляги с pom.

Чтобы включить цели process-resources и compile, вы должны изменить упаковку на pom, добавить следующую конфигурацию в pom и запустить стандартные цели жизненного цикла. Например mvn package или mvn install.

<plugin>
  <artifactId>maven-resources-plugin</artifactId>
  <executions>              
    <execution>
      <id>process-resources</id>
      <phase>process-resources</phase>
      <goals>
        <goal>resources</goal>
      </goals>
    </execution>
  </executions>
</plugin>
<plugin>
  <artifactId>maven-compiler-plugin</artifactId>
  <executions>              
    <execution>
      <id>compile</id>
      <phase>compile</phase>
      <goals>
        <goal>compile</goal>
      </goals>
    </execution>
  </executions>
</plugin>

Полный список целей, связанных с жизненным циклом jar, можно найти в разделе Встроенные привязки жизненного цикла в Введение в жизненный цикл сборки . Все они следуют схеме, аналогичной целям process-resources и compile. В вашем случае вы, вероятно, хотите пропустить цель jar.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...