maven-jar-plugin addClasspath scoping - PullRequest
       2

maven-jar-plugin addClasspath scoping

3 голосов
/ 12 августа 2010

Есть ли способ заставить maven-jar-plugin использовать область при добавлении classpath в манифест jar? У меня есть проект, в котором я хочу создать 2 баночки - время выполнения и тестирование. Jar времени выполнения должен иметь путь к классу только зависимостей времени выполнения. Тестовый jar должен иметь путь к классу тестовых зависимостей. Я не смог понять, как это сделать. есть идеи?

Мне известно о MJAR-117 , но этой ошибке более года - возможно, она была устранена в другой JIRA?

Ответы [ 3 ]

4 голосов
/ 12 августа 2010

Я не думаю, что это поддерживается архиватором Maven (а MJAR-117 , похоже, не получает большой тяги).Возможный обходной путь - предоставить (жестко запрограммированные) дополнительные записи пути к классам при построении test-jar:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <version>2.2</version>
  <executions>
    <execution>
      <id>default-jar</id>
      <configuration>
        <archive>
          <manifest>
            <addClasspath>true</addClasspath>
          </manifest>
        </archive>
      </configuration>
    </execution>
    <execution>
      <id>default-test-jar</id>
      <phase>package</phase>
      <goals>
        <goal>test-jar</goal>
      </goals>
      <configuration>
        <archive>
          <manifest>
            <addClasspath>true</addClasspath>
          </manifest>
          <manifestEntries>
            <Class-Path>foo-1.0.jar bar-2.1.jar</Class-Path>
          </manifestEntries>
        </archive>
      </configuration>
    </execution>
  </executions>
</plugin>

Я согласен, что это не идеально, вы должны добавлять вещи вручнуюи это подвержено ошибкам.Но это работает.

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

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

0 голосов
/ 12 августа 2010

Я хотел бы создать jar приложения и тестовый jar в одном исполнении mvn.Используя профили, я должен был бы выполнить mvn дважды.Причина, по которой мне нужно одно выполнение mvn, заключается в том, что я хочу использовать maven-assembly-plugin для упаковки этих двух jar-файлов вместе в zip-файл.здесь ).Похоже, это невозможно.Я думаю, что единственный способ сделать это - пометить области всех моих тестовых зависимостей как «время выполнения» и просто развернуть эти jar-файлы в PROD, даже если они не будут использоваться.Не очень.

196 if (config.isAddClasspath ()) 197 {198 StringBuffer classpath = new StringBuffer ();199
200 Список артефактов = project.getRuntimeClasspathElements ();

У меня просто возникла другая мысль - можно ли это сделать с помощью плагина maven groovy?

0 голосов
/ 12 августа 2010

Я не в курсе, исправлена ​​ли ошибка.Честно говоря, я даже не знал, существует ли эта ошибка.Но я думаю, что ваша проблема может быть решена с помощью maven профилей

Вы можете иметь отдельный профиль для тестирования как:

<profile>
  <id>test</id>
  <activation>
    <property>
      <name>test</name>
      <value>true</value>
    </property>
  </activation>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8</version>
      <!-- 
        we don't need the test scope since we want the jar plugin to include
        it in classpath 
      -->
      <!-- scope>test</scope --> 
    </dependency>
  </dependencies>
</profile>

Чтобы использовать этот профиль:

$>mvn -Dtest=true package
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...