Как включить статические файлы в jar

У меня есть сборка муравья, которая просто генерирует банку, полную HTML-страниц. я хотел бы сделать то же самое с maven. Я сейчас копирую файлы в новую папку, но файлы не добавляются в последнюю банку. когда я запускаю команду
jar tf mavenjar.jar
Я не вижу файлов, перечисленных в моем терминале. это выглядит так: кликните сюда
когда я запускаю ту же команду на созданном муравьем банке, я вижу следующее: кликните сюда вот мой пом

<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>try1</groupId>
    <artifactId>try1</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
            </plugin>
        </plugins>
        <finalName>mavenjar</finalName>
        <resources>
            <resource>
                <directory>${basedir}/moveTheseFiles</directory>
                <targetPath>${basedir}/newFileLocation</targetPath>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>
</project>


любая идея о том, что мне может не хватать, чтобы включить перемещенные файлы в jar?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
2 626
2

Ответы 2

Этого можно добиться двумя способами. Следование соглашению важнее конфигурации - или его настройка.

Соглашение важнее конфигурации

Самый простой способ скопировать статические файлы в вашу банку - использовать папку по умолчанию src/main/resources. Все файлы, которые вы добавляете туда, будут добавлены в ваш файл jar. Ваш pom.xml можно свести к следующему:

<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>try1</groupId>
    <artifactId>try1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <build>
        <finalName>mavenjar</finalName>
    </build>
</project>

Папка не по умолчанию

Когда вам действительно нужно разместить файлы в другой папке, с вашей конфигурацией почти все в порядке. Отсутствует только часть includes. Вы должны указать maven включить все файлы в указанную папку.

<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>try1</groupId>
    <artifactId>try1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <build>
        <finalName>mavenjar</finalName>
        <resources>
            <resource>
                <directory>moveTheseFiles</directory>
                <includes>
                    <include>**/*</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>
</project>

Примечание: Похоже, вы хотите создать веб-приложение. Может быть, вы хотите создать файл war. Для этого вы можете просто установить

<packaging>war</packaging>

в вашем pom.xml. Тогда все веб-ресурсы (HTML-страницы, CSS, ...) должны находиться в src/main/webapp и будут скопированы в корневую папку войны. Имейте в виду, что файлы в src/main/resources будут скопированы в WEB-INF/classes в результате войны.

я действительно получил его работу после этого решения: Создайте zip в maven с дополнительными файлами рядом с банкой

Я создал файл bin.xml в этом месте src / main / assembly. bin.xml выглядит так

<assembly xmlns = "http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation = "http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
  <id>bin</id>
  <baseDirectory>/</baseDirectory>
  <formats>
    <format>jar</format>
  </formats>
   <fileSets>
    <fileSet>
      <directory>${basedir}/dist/newLocation</directory>
      <outputDirectory>/</outputDirectory> 
    </fileSet>
  </fileSets>
</assembly>

а мой pom.xml выглядит так:

<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>try1</groupId>
    <artifactId>try1</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <build>
        <finalName>mavenjar</finalName>
        <resources>
            <resource>
                <directory>${basedir}/WWW</directory>
                <targetPath>${basedir}/dist/newLocation</targetPath>
                <filtering>false</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <descriptors>
                        <descriptor>src/main/assembly/bin.xml</descriptor>
                    </descriptors>
                    <appendAssemblyId>false</appendAssemblyId>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id> <!-- this is used for inheritance merges -->
                        <phase>package</phase> <!-- append to the packaging phase. -->
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

в терминале я запускаю

mvn clean package
cd target
jar tf mavenjar.jar

и результат выглядит так: кликните сюда

Если вы решили свою проблему с помощью этого решения, вы можете принять его, нажав зеленую галочку. Это говорит другим пользователям, что это решение сработало для вас, и легче понять, что вам не нужна дополнительная помощь с этой проблемой.

Secespitus 16.08.2018 11:39

Другие вопросы по теме