2013-09-28 3 views
18

Я искал в Интернете довольно долгое время, и я не могу понять, как настроить плагин maven-war или что-то подобное, чтобы зависящие от системы зависимости встроенные войны (WEB-INF/Lib папка)Как включить системные зависимости в войне, построенные с использованием maven

Я использую плагин Maven зависимостей в случае банки-строить, как:

<plugin> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>install</phase> 
      <goals> 
       <goal>copy-dependencies</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${project.build.directory}/lib</outputDirectory> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

, но я не в состоянии понять, что должно быть сделано в случае военного строительства. Я пробовал использовать плагин maven-war, но он не включает системные зависимости в сборке.

[UPDATE]

У меня depedencies типа:

<dependency> 
    <groupId>LoginRadius</groupId> 
    <artifactId>LoginRadius</artifactId> 
    <scope>system</scope> 
    <version>1.0</version> 
    <systemPath>${basedir}\lib\LoginRadius-1.0.jar</systemPath> 
</dependency> 

в моей POM и эти зависимости не включены в WEB-INF/Lib, когда война строить.

+1

Что именно вы подразумеваете под «системными зависимостями»? – A4L

+0

Я включил 3 баночки в область 'system' в проекте, и я хочу, чтобы они были включены в папку WEB-INF/lib вместе с другими зависимостями в финальной построенной войне. –

+0

Возможный дубликат [сборка Maven 2 с зависимостями: jar в разделе «система» не включено] (http://stackoverflow.com/questions/2065928/maven-2-assembly-with-dependencies-jar-under-scope-system-not-included) – Joe

ответ

7

Позволь мне попытаться обобщить варианты, которые я пробовал:

<packagingIncludes>${java.home}/lib/jfxrt.jar</packagingIncludes>

Это не работает! Кроме того, только имея имя баночки, исключает все остальное, так что если вы готовы попробовать, то попробуйте

<packagingIncludes>${java.home}/lib/jfxrt.jar,**/*</packagingIncludes>

ответ Jatin казался немного сложным, и я пытался идти через П снова & снова, чтобы выяснить, где точно были упомянуты системные банки, включенные в WEB-INF POM.

В любом случае, я в конечном итоге с помощью этого решения, которое не работает на первый, но через некоторое время и некоторые исправления работали:

installed the jar in my local repository, используя следующую команду:

mvn install:install-file -Dfile="C:\Users\hp\Documents\NetBeansProjects\TwitterAndLoginRadiusMaven\lib\LoginRadius-1.0.jar" -DgroupId=LoginRadius -DartifactId=LoginRadius -Dversion=1.0 -Dpackaging=jar

После запуска приведенная выше команда, я изменил зависимость в POM до

<dependency> 
      <groupId>LoginRadius</groupId> 
      <artifactId>LoginRadius</artifactId> 
      <!--<scope>system</scope>--> 
      <version>1.0</version> 
      <!--<systemPath>${basedir}\lib\LoginRadius-1.0.jar</systemPath>--> 
     </dependency> 

ПРИМЕЧАНИЕ. - См. комментарий системная область & systemPath.

Строительство войны в настоящее время, включает в себя этот LoginRadius-1.0.jar в WEB-INF/Lib

+1

Итак, фундаменталисты Maven не заботятся о том, что теперь у вас нет двухэтапной сборки, состоящей из (ТОЛЬКО) шагов: (1) Fetch from source control; (2) введите команду одиночной сборки (будь то mvn, ant, make или build. {Sh | bat}). Это «решение», на которое я не обвиняю вас, похоже, что это часть Maven, теперь у вас есть зависимость от того, что вы либо запускаете это волшебное заклинание «install», чтобы помещать материал в каталог ~/.m2/cache, OR , имеют кэш типа «Nexus» рабочей группы перед Maven Central, который также имеет разрешение на «развертывание» вещей. – Roboprog

+0

Модель управления зависимостями Maven отлично работает, когда вы занимаетесь библиотеками Apache и Spring, но не так много, когда у вас есть библиотеки (банки) от поставщиков, которые не хотят, чтобы их материал был в Maven Central :-( – Roboprog

+0

Согласен. все в хранилищах является реальной неадекватностью в Maven, поскольку на самом деле могут быть причины, по которым кто-то может не захотеть этого делать (например, иметь одну маленькую банку, которая не стоит создавать целую репо для). Это действительно нужно исправить. Между тем, я перехожу к gradle ... –

4

Если вы имели в виду в качестве зависимостей баночки, то ниже приведен пример pom.xml, который принимает необходимы файлы и создает архив войны:

<build> 
     <defaultGoal>install</defaultGoal> 
     <sourceDirectory>${project.basedir}/src/main/java</sourceDirectory> 
     <testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory> 
     <outputDirectory>${project.basedir}/target/classes</outputDirectory> 
     <testOutputDirectory>${project.basedir}/target/test-classes</testOutputDirectory> 
     <resources> 
      <resource> 
       <directory>${project.basedir}/src/main/resources</directory> 
      </resource> 
     </resources> 
     <testResources> 
      <testResource> 
       <directory>${project.basedir}/src/test/resources</directory> 
      </testResource> 
     </testResources> 
     <pluginManagement> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <version>2.0.2</version> 
        <configuration> 
         <source>1.5</source> 
         <target>1.5</target> 
         <debug>true</debug> 
        </configuration> 
       </plugin> 
       <plugin> 
        <artifactId>maven-war-plugin</artifactId> 
        <version>2.4</version> 
        <configuration> 
         <includeEmptyDirs>true</includeEmptyDirs> 
         <webResources> 
          <resource> 
           <directory>ui</directory> 
           <targetPath></targetPath> 
           <includes> 
            <include>**</include> 
           </includes> 
          </resource> 
          <resource> 
           <directory>lib</directory> 
           <targetPath>WEB-INF</targetPath> 
           <includes> 
            <include>**/*.xml</include> 
            <include>**/log4j.properties</include> 
           </includes> 
          </resource> 
//edited below 
          <resource> 
           <directory>lib</directory> 
           <targetPath>WEB_INF/lib</targetPath> 
           <includes> 
            <include>**/*.jar</include> 
           </includes> 
          </resource> 
         </webResources> 
         <webXml>${project.basedir}/WEB-INF/web.xml</webXml> 
        </configuration> 
       </plugin> 

       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-source-plugin</artifactId> 
        <executions> 
         <execution> 
          <id>attach-sources</id> 
          <goals> 
           <goal>jar</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 

      </plugins> 
     </pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.3.2</version> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
+0

Где говорится, что системные зависимости (несколько банок) пойдут в папку WEB-INF/lib в сборке. –

+0

@coding_idiot 'maven-war-plugin' автоматически делает это, помещая все ваши зависимости в папку WEB-INF/lib – Jatin

+0

, где вы указываете системные банки? Я не мог видеть ни одного места в банке или банке. –

0

Основываясь на своем первоначальном POM, я хотел бы предложить, чтобы отправить их непосредственно в каталоге/WEB-INF Lib

    <goals> 
         <goal>copy-dependencies</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>${project.build.directory}/${project.artifactId}-${project.version}/WEB-INF/lib</outputDirectory> 
        </configuration> 
+1

подход jdevora не работал для меня. Я получил .jar, упакованный в WEB-INF/lib, как писал jdevora, при создании WAR с помощью инструмента командной строки mvn. Но при запуске сервера Wildfly непосредственно из eclipse, развертывание eclipse не использовало задачу копирования pom или компиляцию .war. Он был развернут на основе зависимостей maven от eclipse, и поэтому он пропустил эти JAR. –

0

Если вы не можете установить стороннюю библиотеку в локальный репозиторий, из-за некоторых глупых проверок именования/упаковки третьей стороной, вы можете добавить свои зависимые области system к вашему окончательному пакету во время сборки (по крайней мере, если вы строите webapp), используя maven-war-plugin, где вам нужно создать конфигурацию типа t его.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>3.2.0</version> 
    <configuration> 
     <failOnMissingWebXml>true</failOnMissingWebXml> 
     <webResources> 
      <resource> 
       <directory>path/to/lib/in/project</directory> 
       <targetPath>WEB-INF/lib</targetPath> 
      </resource> 
     </webResources> 
    </configuration> 
</plugin> 

Не уверен, но я считаю, что библиотека должна быть где-то локально в базовом каталоге проекта. Я хочу создать каталог под src/main/ под названием lib, чтобы хранить эти типы сторонних библиотек. Во время процесса сборки они помещаются в правильный каталог и добавляются в файл войны.

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