Вызов файла JAR в хранилище M2 - PullRequest
4 голосов
/ 23 марта 2012

У меня есть проект, в котором я хочу вызвать другой файл Jar в репозитории M2 на этапе пост-выполнения текущего проекта.

Пример скелета моего POM

<plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>exec-maven-plugin</artifactId>
          <version>1.1</version>

            <executions>
              <execution>
              <id>exec-one</id>
              <phase>verify</phase>
              <configuration>
                  executable>java</executable>
                  <arguments> <argument>-jar</argument>
                  <argument>JarToInvoke.jar</argument>
                  </arguments>                
                  <**workingDirectory**>/C:/path to repo</workingDirectory>
                  </configuration>
                      <goals>
                         <goal>exec</goal>
                      </goals>
                  </execution>
                  </executions>

              <dependencies> <dependency>
                 <groupId>GroupId of JarToInvoke</groupId>
                 <artifactId>JarToInvoke</artifactId>
               <version>1.0.0-SNAPSHOT</version>
              </dependency>
              </dependencies>
            </plugin>    
          </plugins>

Я пробовал с maven-exec-plugin, но возникли следующие проблемы:

  1. Где мне нужно указать зависимости JarToInvoke?Как зависимость проекта или зависимость exec-plugin?

  2. При жестком кодировании рабочего каталога (/ C: / path to repo) я могу вызвать артефакт JarToInvoke.Но это не очень хорошее решение, потому что в конечном итоге этот проект должен выполняться на любом м / с с разными ОС.Итак, как я могу сделать exec-плагин для поиска артефакта JarToInvoke в репозитории M2 проекта (путь к классу по умолчанию)?

3.В случае жесткого кодирования пути репо M2 вВ рабочем каталоге я смог вызвать артефакт JarToInvoke.Но при запуске артефакта JarToInvoke он вызывает другую проблему с зависимостями, некоторые из зависимостей log4j JarToInvoke не могут найти.Я сделал JarToInvoke как заштрихованный кувшин, и он работал как положено.Но это не постоянное или хорошее решение (поскольку размер заштрихованной банки составляет 35 МБ).Как я могу поручить exec-плагину искать зависимые банки в репозитории M2.

Пожалуйста, поделитесь своими предложениями.Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 09 января 2016

Вероятно, более простой способ определить абсолютный путь к файлу jar - использовать maven-dependency-plugin с properties goal.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.3</version>
    <executions>
      <execution>
        <goals>
          <goal>properties</goal>
        </goals>
      </execution>
    </executions>
</plugin>
<plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>exec-maven-plugin</artifactId>
      <version>1.1</version>

        <executions>
          <execution>
          <id>exec-one</id>
          <phase>verify</phase>
          <configuration>
              <executable>java</executable>
              <arguments> 
                   <argument>-jar</argument>
                   <argument>${GroupIdofJarToInvoke:JarToInvoke:jar}</argument>
              </arguments>                
              <workingDirectory>/C:/path to repo</workingDirectory>
              </configuration>
                  <goals>
                      <goal>exec</goal>
                  </goals>
              </execution>
            </executions>
        </plugin>    
      </plugins>

      <dependencies>
           <dependency>
               <groupId>GroupIdofJarToInvoke</groupId>
               <artifactId>JarToInvoke</artifactId>
               <version>1.0.0-SNAPSHOT</version>
           </dependency>
      <dependencies>
1 голос
/ 23 марта 2012

Эта пример страницы из документации плагина Exec описывает то, что вы хотите, я думаю.

Если бы вы могли использовать цель exec:java вместо exec:exec, поиск JVM взятзаботиться о вас.Вы также можете добавить зависимости плагина или зависимости проекта, изменив параметры конфигурации плагина includeProjectDependencies и includePluginDependencies.

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.1</version>

    <executions>
        <execution>
            <id>exec-one</id>
            <phase>verify</phase>
            <configuration>
                <includeProjectDependencies>false</includeProjectDependencies>
                <includePluginDependencies>true</includePluginDependencies>
                <executableDependency>
                    <groupId>GroupId of JarToInvoke</groupId>
                    <artifactId>JarToInvoke</artifactId>
                </executableDependency>

                <!-- Look up the main class from the manifest inside your dependency's JAR -->
                <mainClass>com.example.Main</mainClass>
                <arguments>
                    <!-- Add any arguments after your JAR here --->
                </arguments>
            </configuration>
            <goals>
              <goal>java</goal>
           </goals>
        </execution>
    </executions>

    <dependencies>
        <dependency>
            <groupId>GroupId of JarToInvoke</groupId>
            <artifactId>JarToInvoke</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</plugin>    

Единственным недостатком является то, что вам нужно явно указать основной класс вбаночка для запуска.Вы можете посмотреть это, открыв манифест в JAR-файле зависимости и прочитав атрибут Main-Class.

Если вам действительно нужно использовать exec:exec, вы можете использовать Maven DependencyЦель copy-dependencies плагина - копировать зависимости из вашего локального репозитория в предопределенное место (например, ${project.build.directory} / exec-jars), а затем вы можете передать этот каталог в опции конфигурации workingDirectory плагина exec.

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