Maven: включить файлы в JAR META-INF

Я использую Maven для создания проекта Java, и у меня есть пара файлов, CHANGELOG и LICENSE, которые я хотел бы скопировать в каталог META-INF внутри файла JAR.

Пока у меня работает следующее:

<build>
    <resources>
        <resource>
            <directory>${project.basedir}</directory>
            <includes>
                <include>CHANGELOG</include>
                <include>LICENSE</include>
            </includes>
            <targetPath>META-INF</targetPath>
        </resource>
    </resources>
    <plugins>
        ...

но это также копирует эти два файла в каталог classes/META-INF при компиляции.

Поэтому я бы хотел, чтобы файлы были включены в файл JAR, но больше нигде. Есть ли способ сделать это?


person Julián Urbano    schedule 08.08.2016    source источник


Ответы (3)


Вам не нужно указывать какую-либо пользовательскую конфигурацию maven для удовлетворения ваших потребностей.

В src/main/resources просто создайте папку META-INF и поместите сюда свои файлы.
Таким образом, вы сможете найти их в папке META-INF созданного JAR.

Кроме того, вы должны удалить элемент <resource>, который вы добавили в pom.xml, так как он изменяет папку ресурсов по умолчанию на корень проекта вместо src/main/resources по умолчанию.

person davidxxx    schedule 08.08.2016
comment
Но результат тот же, верно? Если мы просто скомпилируем, он также скопирует эти файлы ресурсов. Я хочу, чтобы они были скопированы только в файл JAR. - person Julián Urbano; 09.08.2016
comment
не совсем, так как в Jar ресурсы не будут дублироваться в classs/META-INF. Как объяснено, они будут только в каталоге META-INF. - person davidxxx; 09.08.2016
comment
Привет @davidxxx. Я заметил ваш комментарий, когда ресурсы должны идти в META-INF, а можно ли класть ресурсы в корень jar-файла, рядом с META-INF? Спасибо. - person Cristian; 18.07.2017
comment
Привет @Кристиан. Конечно, вы можете, так как все ресурсы (файлы и папки), которые вы будете хранить в своем проекте в src/main/resources, будут по умолчанию находиться в корне созданного JAR. - person davidxxx; 18.07.2017
comment
Я использую Spring Boot, и все идет под BOOT-INF, который находится рядом с META-INF. Любая идея здесь? Спасибо. - person Cristian; 18.07.2017
comment
@Cristian Spring Boot представляет собой банку повторной загрузки, позволяющую автозагрузке приложения. Это не классическая банка. Вы не должны беспокоиться об этом. Баночка все равно останется доступной для приложения. Какая именно у вас проблема? - person davidxxx; 18.07.2017
comment
Я развертываю на AWS и хочу включить в корень JAR некоторые файлы конфигурации и папку конфигурации с файлами. JAR Spring Boot содержит папки BOOT-INF, META-INF и org, и я хочу включить папку .ebextensions и файл cron.yaml. - person Cristian; 18.07.2017
comment
@Cristian Вы можете сделать это с помощью автозагружаемой WAR Spring Boot, но не с автозагружаемой JAR Spring Boot, которая не предназначена для такого макета. Вы действительно найдете свои ресурсы в BOOT-INF\classes. Проблема в том, что вы не могли легко изменить его, поскольку эта переупаковка выполняется самой Spring Boot. Вы можете попытаться создать макет и передать его свойству layoutFactory плагина переупаковки Spring Boot, но без гарантии. docs.spring.io/spring- boot/docs/current/maven-plugin/ В любом случае вопрос интересный, почему бы не задать его на SO? - person davidxxx; 18.07.2017

Если вы хотите добавить файлы и каталог в папку META-INF, используйте этот код в своем pom.xml.

   <build>
        <finalName>CustomJsfComponents</finalName>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**.xml</include>
                    <include>**resources/**</include>
                </includes>
                <targetPath>META-INF</targetPath>
            </resource>
        </resources>
    </build>
person Edson Suárez    schedule 27.11.2019

Измените свой pom, добавив webResources

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
                <webResources>
                    <resource>
                        <directory>target/classes/META-INF/</directory>
                        <includes>
                            <include>*.*</include>
                        </includes>
                        <targetPath>META-INF/</targetPath>
                    </resource>
                </webResources>
            </configuration>
        </plugin>

Рассмотрим файл config.properties, который можно найти в

src / main / resources / META-INF / config.properties

Вывод примера войны пример вывода войны

person Ronald Coarite    schedule 05.01.2021