2009-04-15 15 views
21

У меня есть артефакт, который создается и развертывается определенным образом (а не как файл jar). В ходе развертывания создается военный файл.maven развернуть дополнительный файл jar

Как настроить pom так, чтобы артефакт был также развернут как файл jar в другом месте?

+1

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

ответ

2

Вы должны добавить соответствующую зависимость артефакта в зависимостях файла pom.

Ex:

<dependency> 
     <groupId>org.apache.myfaces.core</groupId> 
     <artifactId>myfaces-api</artifactId> 
     <version>1.2.2</version> 
     <scope>compile</scope> 
</dependency> 
+0

Сделать артефакт зависимым от самого себя? Я не понимаю, как это повлияет на развертывание. И на самом деле maven не любит получающуюся циклическую ссылку. –

5

«Maven путь», чтобы разбить из src/main/java в отдельный модуль, и иметь архив войны зависят от этого.

Если вы абсолютно устойчивы к такому подходу, вы можете использовать профиль для изменения содержимого элемента packaging. Я не уверен, что это возможно.

+1

Вы не можете напрямую менять упаковку в профиле, но вы можете сделать упаковку зависимой от свойства и изменить ее в профиле. –

3

Отделять их - это правильный путь. Принуждение maven к войне и банке в одном модуле возможно, но вызовет проблемы в будущем.

+0

Какие проблемы? Если вам нужна банка, и она создается этим модулем ... тогда вы должны быть в порядке, пока эта банка всегда создается этим модулем ... (и у вас есть зависимость от этой банки). Если у вас есть более конкретная проблема с maven, которую вы имели в виду ... – smaudet

0

Один из способов решения этого заключается в том, чтобы модуль построил банку, а затем использовал плагин сборки для создания военного файла с банкой в ​​WEB-INF/lib этой войны. Я бы настоятельно рекомендовал против этого. Вам будет лучше иметь проект банки и военный проект с родительским проектом, строящим оба модуля.

20

blog post и его комментарии имеют ответ.

Эти три конфигурации плагинов позволят вам построить/установить/развернуть версию jar вместе с войной.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>make-a-jar</id> 
      <phase>compile</phase> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-install-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>install</phase> 
      <goals> 
       <goal>install-file</goal> 
      </goals> 
      <configuration> 
       <packaging>jar</packaging> 
       <artifactId>${project.artifactId}</artifactId> 
       <groupId>${project.groupId}</groupId> 
       <version>${project.version}</version> 
       <file> 
        ${project.build.directory}/${project.artifactId}-${project.version}.jar 
       </file> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-deploy-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>deploy</phase> 
      <goals> 
       <goal>deploy-file</goal> 
      </goals> 
      <configuration> 
       <packaging>jar</packaging> 
       <generatePom>true</generatePom> 
       <url>${project.distributionManagement.repository.url}</url> 
       <artifactId>${project.artifactId}</artifactId> 
       <groupId>${project.groupId}</groupId> 
       <version>${project.version}</version> 
       <file>${project.build.directory}/${project.artifactId}-${project.version}.jar</file> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
+0

Использование maven-install-plugin, как вы описали, решило ту же проблему, с которой я столкнулся при попытке установить сгенерированный, но не развернутый файл jar, используя плагин android maven с упаковка установлена ​​в aar. Мне нужен файл jar как обходной путь для визуальной проблемы IDE NetBeans с такими зависимостями. – Amin

+0

Должно быть само собой разумеющимся, но помните, что если ваш проект создал банку с другим именем (или вы установили finalName в своей сборке), вам нужно будет отрегулировать соответственно $ {build.finalName} .jar, а не выше.Проверьте свою целевую директорию, чтобы узнать, какая баня действительно создана. – smaudet

23

Maven deploy средства развертывания артефакт в Maven Repository, а не на сервере приложений.

настроить дополнительные JAR артефакт, как это:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>make-a-jar</id> 
      <phase>compile</phase> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Присоединить этот новый артефакт к вашему проекту:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.7</version> 
    <executions> 
     <execution> 
      <id>attach-artifacts</id> 
      <phase>package</phase> 
      <goals> 
       <goal>attach-artifact</goal> 
      </goals> 
      <configuration> 
       <artifacts> 
        <artifact> 
         <file>some file</file> 
         <type>jar</type>       
        </artifact> 
       </artifacts> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
+2

С помощью «build-helper-maven-plugin» я смог развернуть войну, банку и тестовую банку из одного проекта. К сожалению, создание новых модулей не было возможным, по другим причинам, кроме технических. Это была спасательная жизнь! – javashlook

+0

спас мои часы. – Sohan