2014-09-11 3 views
1

Я пытаюсь использовать плагин Assembly включить dependecies, а такжеMaven сборки плагин включая баночки зависимостей и внешних файлов

Вот мой сборки плагин

<plugin> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <version>2.4.1</version> 
       <executions> 
        <execution> 
         <id>create-executable-jar</id> 
         <phase>package</phase> 
         <goals> 
          <goal>single</goal> 
         </goals> 

        </execution> 
       </executions> 

       <configuration> 
          <descriptorRefs> 
           <descriptorRef> 
            jar-with-dependencies 
           </descriptorRef> 
            </descriptorRefs> 
            <descriptors> 
             <descriptor>src/assembly/assembly.xml</descriptor> 
            </descriptors> 
          <archive> 
           <manifest> 
            <mainClass>com.sarm.myproject.XMLParser.LPUnMarshaller</mainClass> 
           </manifest> 
          </archive> 
         </configuration> 

      </plugin> 

вот мой assembly.xml дескриптор , я сделал id таким же, как descritpor ref, поскольку он создавал другую банку для этого дескриптора. Таким образом, у меня есть два дескриптора, один из которых представляет собой дескриптор jar-with-dependents ref, а один - нижний дескриптор, в этом случае происходит то, что он создает две банки, а вторая банка перезаписывает предыдущую банку. Как можно включить эти два в одну банку.

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> 
    <id>jar-with-dependencies</id> 
    <formats> 
    <format>jar</format> 
    </formats> 


    <fileSets> 
    <fileSet> 
     <directory>${basedir}</directory> 
     <includes> 
     <include>*.xml</include> 
     </includes> 

    <excludes> 
     <exclude>30000dests.xml</exclude> 

     </excludes> 

    </fileSet> 
    <fileSet> 
     <directory>${basedir}/test</directory> 
     <includes> 
     <include>*.xml</include> 
     </includes> 

    </fileSet> 
    </fileSets> 
</assembly> 

Edit: Я пробовал некоторые другие подходы, и я видел, что, если я использую assembly.xml в качестве дескриптора, новая баночка создается вдоль стороны какой-либо другой сосуд по умолчанию, который создается как хорошо. Так что я получаю две банки. Метка по умолчанию - это исполняемый файл, такой как плагин jar. даже если плагин сборки настроен на наличие manifest.mf с моим основным именем класса, jar, созданный через assmbly.xml, не является исполняемым и имеет папку имени моего проекта с исполняемым банком внутри него.

Я использую mvn clean install для создания моего проекта и файла jar.

ответ

0

Вы должны создать два модуля, которые производят две банки. Обычно maven собирается создать один файл jar для каждого модуля с именем модуля в качестве имени jar. Maven рекомендует, чтобы каждый модуль имел один выходной артефакт.

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

+0

Спасибо за ответ. Идея заключалась в том, чтобы иметь только одну банку. С зависимостями и внешними файлами. В двух баночках, у которых есть libs, а у одного есть только внешний, а второй нет даже классов, они не очень мне очень помогут. Я буду запускать только банку. Кроме того, банки выходят в разобранном виде. Если я использую assembly.xml с dependencysets THEN, у меня могут быть банки, но тогда я пропущу код. Почему скомпилированные классы не упаковываются с банкой, созданной с помощью assembly.xml. Мне очень понравилась идея использовать assembly.xml, она настолько гибкая. – sarmahdi

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