С помощью Maven, как я могу создать дистрибутив, в котором есть jar моего проекта и все зависимые jar?

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

26
задан skaffman 24 November 2009 в 20:37
поделиться

3 ответа

Для одного модуля я бы использовал сборку, похожую на следующую (src/assembly/bin.xml):

<assembly>
  <id>bin</id>
  <formats>
    <format>tar.gz</format>
    <format>tar.bz2</format>
    <format>zip</format>
  </formats>
  <dependencySets>
    <dependencySet>
      <unpack>false</unpack>
      <scope>runtime</scope>
      <outputDirectory>lib</outputDirectory>
    </dependencySet>
  </dependencySets>
  <fileSets>
    <fileSet>
      <directory>src/main/command</directory>
      <outputDirectory>bin</outputDirectory>
      <includes>
        <include>*.sh</include>
        <include>*.bat</include>
      </includes>
    </fileSet>
  </fileSets>
</assembly>

Чтобы использовать эту сборку, добавьте следующую конфигурацию в ваш pom.xml:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
      <descriptors>
        <descriptor>src/assembly/bin.xml</descriptor>
      </descriptors>
    </configuration>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

В этом примере сценарии запуска / остановки расположены в src/main/command и объединены в bin, зависимости объединены в lib. Настройте его под свои нужды.

26
ответ дан Rafael Ribeiro 24 November 2009 в 20:37
поделиться

Вот мое решение для создания распространяемого .zip (или .tar.gz / .tar.bz2), включающего все зависимости в папке lib. Он будет:

  1. Создать jar с Манифестом, включающим зависимости каталога lib в качестве пути к классам и основного класса для запуска при выполнении jar.
  2. Скопируйте все зависимые банки в каталог target/lib.
  3. Создайте распространяемый `zip с главным jar-файлом и всеми зависимыми jar-файлами каталога lib.

Выдержка из pom.xml:

<!-- create distributable -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
                <mainClass>full.path.to.MainClass</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>
<plugin>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}/lib</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>attached</goal>
            </goals>
            <configuration>
                <descriptors>
                    <descriptor>src/main/resources/dist.xml</descriptor>
                </descriptors>
            </configuration>
        </execution>
    </executions>
</plugin>

dist.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>
    <formats>
        <format>zip</format>
        <format>tar.gz</format>
    </formats>
    <fileSets>
        <fileSet>
            <directory>${project.basedir}</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>README*</include>
                <include>LICENSE*</include>
                <include>NOTICE*</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>${project.build.directory}</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>*.jar</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>${project.build.directory}/lib</directory>
            <outputDirectory>lib</outputDirectory>
            <includes>
                <include>*.jar</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>${project.build.directory}/site</directory>
            <outputDirectory>docs</outputDirectory>
        </fileSet>
    </fileSets>
</assembly>

dist.xml был получен из формата дескриптора bin здесь: http://maven.apache.org/plugins/maven-assembly-plugin/descriptor-refs.html#bin [+1122]

6
ответ дан Kai Stapel 24 November 2009 в 20:37
поделиться

Я использовал подключаемый модуль maven для упаковки всего в одну банку. Вы можете найти информацию здесь http://maven.apache.org/plugins/maven-assembly-plugin/ http://maven.apache.org/plugins/maven-assembly-plugin/ use.html

HTH.

1
ответ дан nayakam 24 November 2009 в 20:37
поделиться
  • 1
    Мой код имел идентификатор для каждого td по умолчанию. Можно быть в состоянии удалить, которые изменяют размеры функции. Теперь после этого, в то время как я вижу, что использовал ту функцию для особых целей. Только определение Дескрипторов может быть достаточно. – Alireza Ahmadi Rad 1 April 2017 в 12:12
  • 2
    Мой код имел идентификатор для каждого td по умолчанию. Можно быть в состоянии удалить, которые изменяют размеры функции. Теперь после этого, в то время как я вижу, что использовал ту функцию для особых целей. Только определение Дескрипторов может быть достаточно. – Alireza Ahmadi Rad 1 April 2017 в 12:12
  • 3
    Мой код имел идентификатор для каждого td по умолчанию. Можно быть в состоянии удалить, которые изменяют размеры функции. Теперь после этого, в то время как я вижу, что использовал ту функцию для особых целей. Только определение Дескрипторов может быть достаточно. – Alireza Ahmadi Rad 1 April 2017 в 12:12
  • 4
    Мой код имел идентификатор для каждого td по умолчанию. Можно быть в состоянии удалить, которые изменяют размеры функции. Теперь после этого, в то время как я вижу, что использовал ту функцию для особых целей. Только определение Дескрипторов может быть достаточно. – Alireza Ahmadi Rad 1 April 2017 в 12:12
  • 5
    Мой код имел идентификатор для каждого td по умолчанию. Можно быть в состоянии удалить, которые изменяют размеры функции. Теперь после этого, в то время как я вижу, что использовал ту функцию для особых целей. Только определение Дескрипторов может быть достаточно. – Alireza Ahmadi Rad 1 April 2017 в 12:12
Другие вопросы по тегам:

Похожие вопросы: