2016-12-16 6 views
1

У меня есть файл WAR, который включен в качестве зависимости в моем модуле сборки. Файл WAR содержит некоторые свойства, которые я бы хотел исключить в моем новом файле WAR.Исключая файлы свойств в файле * .war с помощью сборок

По неизвестным причинам исключение не работает. Даже если я исключаю все файлы свойств, используя **/*.properties, файлы не исключаются. Любая идея, что здесь не так?

Maven Pom

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 

<groupId>de.mycompanyname.myprojectname</groupId> 
<version>1.0-SNAPSHOT</version> 

<artifactId>demo-dashboard-assembly</artifactId> 
<packaging>pom</packaging> 
<name>demo-dashboard-assembly</name> 

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.5.3</version> 
      <goals></goals> 
      <executions> 
       <execution> 
        <id>delivery-prod</id> 
        <phase>prepare-package</phase> 
        <goals><goal>single</goal></goals> 
        <configuration> 
         <appendAssemblyId>false</appendAssemblyId> 
         <finalName>demo#prod#dashboard</finalName> 
         <descriptors> 
          <descriptor>src/main/assembly/delivery.prod.xml</descriptor> 
         </descriptors> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

<dependencies> 
    <dependency> 
     <groupId>de.mycompanyname</groupId> 
     <artifactId>myprojectname.dashboard</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <type>war</type> 
    </dependency> 
</dependencies> 

</project> 

delivery.prod.xml

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd"> 
<id>delivery</id> 
<formats> 
    <format>dir</format> 
</formats> 
<includeBaseDirectory>false</includeBaseDirectory> 

<dependencySets> 
    <dependencySet> 
     <outputDirectory>/</outputDirectory> 
     <unpack>true</unpack> 
     <excludes> 
      <exclude>WEB-INF/classes/commonDashboard.dev.properties</exclude> 
      <exclude>WEB-INF/classes/commonDashboard.test.properties</exclude> 
      <exclude>WEB-INF/classes/db.dev.properties</exclude> 
      <exclude>WEB-INF/classes/db.test.properties</exclude> 
     </excludes> 
    </dependencySet> 
</dependencySets> 
</assebly> 

ответ

1

Проблема заключается в том, что you're not using the right <exclude> configuration.

Указав <exclude> на <dependencySet> уровне

<dependencySet> 
    <outputDirectory>/</outputDirectory> 
    <unpack>true</unpack> 
    <excludes> 
    <exclude>WEB-INF/classes/commonDashboard.dev.properties</exclude> 
    <!-- more excludes --> 
    </excludes> 
</dependencySet> 

вы указанием зависимостей, которые должны быть исключены в этом наборе. То есть он определяет зависимости, которые не следует распаковывать в корневую папку здесь. Ясно, что поскольку нет зависимостей WEB-INF/classes/..., это не соответствует и ничего не делает. На самом деле, это поднимет предупреждение, что вы можете увидеть в журналах:

[WARNING] The following patterns were never triggered in this artifact exclusion filter: 
o 'WEB-INF/classes/commonDashboard.dev.properties' 
o 'WEB-INF/classes/commonDashboard.test.properties' 
o 'WEB-INF/classes/db.dev.properties' 
o 'WEB-INF/classes/db.test.properties' 

То, что вы хотите вместо этого, чтобы исключить файлы в зависимостях, которые распакованы. Для этого вам нужно использовать <unpackOptions> элемент, который содержит исключить конфигурацию:

Определяет опции для включения/исключения/фильтрации предметов, извлеченных из архива. (С 2,2-бета-1)

Таким образом, вы должны иметь вместо:

<dependencySets> 
    <dependencySet> 
    <outputDirectory>/</outputDirectory> 
    <unpack>true</unpack> 
    <unpackOptions> 
     <excludes> 
     <exclude>WEB-INF/classes/commonDashboard.dev.properties</exclude> 
     <exclude>WEB-INF/classes/commonDashboard.test.properties</exclude> 
     <exclude>WEB-INF/classes/db.dev.properties</exclude> 
     <exclude>WEB-INF/classes/db.test.properties</exclude> 
     </excludes> 
    </unpackOptions> 
    </dependencySet> 
</dependencySets> 

Это правильно исключить выбранные файлы при распаковке каждой зависимости, и в результате сборки не будет их. Обратите внимание, что вы могли бы use a regular expression вместо указания каждого файла; например:

<exclude>%regex[WEB-INF\/classes\/(commonDashboard|db)\.(dev|test)\.properties]</exclude> 
+0

Я не знал об этом варианте. Спасибо за объяснение! – KayJ