2015-10-14 4 views
2

Я пытаюсь исключить файл ресурсов из моей сборки Maven. Я скопировал файл my-jar-with-dependencies.xml и добавил раздел. Это правильно исключает копирование именованного файла в файл jar's/src/main/resources , но файл по-прежнему копируется в каталог верхнего уровня jar вместе с другими ресурсами.Как исключить файл ресурсов в сборке Maven?

<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"> 
    <!-- TODO: a jarjar format would be better --> 
    <id>my-jar-with-dependencies</id> 
    <formats> 
    <format>jar</format> 
    </formats> 

    <fileSets> 
    <fileSet> 
     <directory>${project.basedir}</directory> 
     <outputDirectory></outputDirectory> 
     <useDefaultExcludes>true</useDefaultExcludes> 
     <excludes> 
     <exclude>**/lanchecker.properties</exclude> <!-- this removes it from jar/src/main/resources but *NOT* from jar/ --> 
     </excludes> 
    </fileSet> 
    </fileSets> 

    <includeBaseDirectory>false</includeBaseDirectory> 
    <dependencySets> 
    <dependencySet> 
     <outputDirectory>/</outputDirectory> 
     <useProjectArtifact>true</useProjectArtifact> 
     <unpack>true</unpack> 
     <scope>runtime</scope> 
    </dependencySet> 
    </dependencySets> 
</assembly> 

Могу ли я предотвратить сборку maven-assembly-plugin из этой копии, но при этом оставить этот файл доступным для разработки?

Update:

зависимости, в соответствии с просьбой:

<dependencies> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>4.2.1.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>xml-apis</groupId> 
     <artifactId>xml-apis</artifactId> 
     <version>1.4.01</version> 
    </dependency> 
    <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjrt</artifactId> 
     <version>1.8.7</version> 
    </dependency> 
    <dependency> 
     <groupId>org.seleniumhq.selenium</groupId> 
     <artifactId>selenium-server</artifactId> 
     <version>2.47.1</version> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.12</version> 
    </dependency> 
    <dependency> 
     <groupId>ch.qos.logback</groupId> 
     <artifactId>logback-classic</artifactId> 
     <version>1.1.3</version> 
    </dependency> 

    <dependency> 
     <groupId>javax.mail</groupId> 
     <artifactId>javax.mail-api</artifactId> 
     <version>1.5.4</version> 
    </dependency> 

    <dependency> 
     <groupId>javax.mail</groupId> 
     <artifactId>mail</artifactId> 
     <version>1.4.7</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context-support</artifactId> 
     <version>4.2.1.RELEASE</version> 
    </dependency> 

    <dependency> 
     <groupId>org.freemarker</groupId> 
     <artifactId>freemarker</artifactId> 
     <version>2.3.23</version> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.commons</groupId> 
     <artifactId>commons-lang3</artifactId> 
     <version>3.4</version> 
    </dependency>  

    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-core</artifactId> 
     <version>2.6.3</version> 
    </dependency> 

    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>2.6.3</version> 
    </dependency> 

    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-annotations</artifactId> 
     <version>2.6.3</version> 
    </dependency> 

    </dependencies> 
+0

Было бы полезно отправить ваши зависимости POM. догадка о том, что проблема ... – Daniel

+0

Является ли 'lanchecker.properties' включенным в любую из зависимостей? – Daniel

+0

@ Даниэль: Я добавил зависимости. Это то, что вы имеете в виду? – Ian

ответ

3

Попробуйте это:

... 
<dependencySets> 
    <dependencySet> 
     <outputDirectory>/</outputDirectory> 
     <useProjectArtifact>true</useProjectArtifact> 
     <unpack>true</unpack> 
     <scope>runtime</scope> 
     <unpackOptions> 
     <excludes> 
      <exclude>**/lanchecker.properties</exclude> 
     </excludes> 
     </unpackOptions> 
    </dependencySet> 
    </dependencySets> 
... 

Причина это работает в том, что различные сборочные селекторы (<dependencySets>, <moduleSets>, <fileSets> и <files> предназначены для разных целей, и они n перекрывается.

Например, <fileSets> только цели файлы в этот модуль (тот, к которому привязан узел). Поскольку вы указали <useProjectArtifact>true</useProjectArtifact>, набор зависимостей будет включать этот модуль в качестве зависимости, поэтому именно поэтому lanchecker.properties нашел свой путь в вашей сборке, и поэтому вы также должны исключить его из набора зависимостей.

Не зная, что ваш POM выглядит или то, что вы пытаетесь достичь, это может быть достаточно, чтобы указать <useProjectArtifact>false</useProjectArtifact> и просто использовать <fileSets> контролировать содержимое этого модуля.

С другой стороны, так как этот модуль уже включен в набор зависимостей (путем <useProjectArtifact>true</useProjectArtifact>, вы можете уйти только с удалением раздела <fileSets> в целом.

сборки, как правило, последнее, что Пользователь Maven учится осваивать, он мощный, гибкий и может быть сложным, особенно если вы выбрасываете мультимодули в миксе, но также может быть немного причудливым.

+0

Это похоже работа. Поэтому я должен указать исключение в двух отдельных местах? – Ian

+1

См. Мое обновление. Надеюсь, это объяснит, как это работает. – Daniel

+0

Вам не хватает закрытия '/' от

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