2012-04-29 3 views
0

У меня есть jar say xyz.jar, который имеет структуру как src/main/java/resources. Теперь эта папка ресурсов содержит 3 подпапки:/fileone.txt b/filetwo.txt и c/filethree.txt. Я использую эту банку в качестве зависимости для создания трех трех разных военных файлов. В каждом из этих военных файлов я использую только один из трех файлов .i.e либо fileone.txt, либо filetwo.txt или filethree.txt. Итак, в pom.xml для создания любого из трех военных файлов есть ли способ, по которому я могу настроить исключение оставшихся двух файлов? Например, если я строю firstWar.war, я хочу включить только файлe.txt и исключить два других. Я считаю, что packageExcludes в maven war plugin можно использовать здесь, но я не уверен, как это сделать? Спасибо.исключая определенные файлы из банки, которая является зависимостью в войне в maven3

ответ

1
  • Решение 1:

Вы полагаете, у вас есть баночка файл, который содержит ресурсы. Я бы предложил разместить файлы/ресурсы в военный модуль и произвести три разных войны из одной сборки. Это можно решить, используя плагин maven-assembly-plugin. Вы иметь следующую структуру:

. 
|-- pom.xml 
`-- src 
    |-- main 
    | |-- java 
    | |-- resources 
    | |-- environment 
    | | |-- test 
    | | | `-- database.properties 
    | | |-- qa 
    | | | `-- database.properties 
    | | `-- production 
    | |  `-- database.properties 
    | `-- webapp 

Вам нужно сборочный-дескриптор и, конечно, файл POM так:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>test</id> 
     <phase>package</phase> 
     <goals> 
      <goal>single</goal> 
     </goals> 
     <configuration> 
      <descriptors> 
      <descriptor>${project.basedir}/src/main/assembly/test.xml</descriptor> 
      </descriptors> 
     </configuration> 
     </execution> 
     <execution> 
     <id>qa</id> 
     <phase>package</phase> 
     <goals> 
      <goal>single</goal> 
     </goals> 
     <configuration> 
      <descriptors> 
      <descriptor>${project.basedir}/src/main/assembly/qa.xml</descriptor> 
      </descriptors> 
     </configuration> 
     </execution> 
     <execution> 
     <id>production</id> 
     <phase>package</phase> 
     <goals> 
      <goal>single</goal> 
     </goals> 
     <configuration> 
      <descriptors> 
      <descriptor>${project.basedir}/src/main/assembly/production.xml</descriptor> 
      </descriptors> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

Файл дескриптора выглядит следующим образом:

<assembly... 
    <id>test</id> 
    <formats> 
    <format>war</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <dependencySets> 
    <dependencySet> 
     <unpack>true</unpack> 
     <useProjectArtifact>true</useProjectArtifact> 
    </dependencySet> 
    </dependencySets> 
    <fileSets> 
    <fileSet> 
     <outputDirectory>WEB-INF</outputDirectory> 
     <directory>${basedir}/src/main/environment/test/</directory> 
     <includes> 
     <include>**</include> 
     </includes> 
    </fileSet> 
    </fileSets> 
</assembly> 

Какие вам нужно для каждого ресурса (в вашем случае три раза). Их можно назвать как ваши среды, такие как test, qa, production (не забудьте дать им соответствующий идентификатор). Они должны быть помещены в папку src/main/assembly. Или в зависимости от вашего envrionment (file1, file2, file3, но я думаю, что в действительности существуют лучшие имена.).

  • Решение 2:

Вы будете делать ту же установку для файла банки, который вы используете, и создать три различные файл банка с соответствующим классификатором, который представляет собой ресурс, который вы любите. Но потом вы должны изменить сборку войны, чтобы создать три разных файла войны для каждого другого ресурса. О настройке i wrote a blog entry.

+0

спасибо khmarbaise, этот файл дескриптора должен быть для каждого из трех файлов? и где они должны быть размещены. Также как должны быть названы эти файлы дескрипторов? файлы присутствуют как resouces/folder1/file1 resources/folder2/file2 и resources/folder3/file3 – pranay

+0

Усовершенствованный ответ соответствующим образом. – khmarbaise

+0

еще раз спасибо .. но я верю, что это сработает, если я соберу все 3 военных файла? ... что, если я построю каждый отдельно? – pranay

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