Как создать толстую банку?

В SpringBoot у вас есть аннотация @SpringBootApplication, но что эквивалентно аккуратной среде Java Spark?

IntelliJ создает проект Maven, и я добавил искровую зависимость, но, выполнив цель установки, я получаю банку размером 5 КБ без манифеста. Не исполняемый 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>sparkdemo</groupId>
  <artifactId>sparkdemo</artifactId>
  <version>1.0 </version>
  <packaging>jar</packaging>

  <name>sparkdemo</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.sparkjava</groupId>
      <artifactId>spark-core</artifactId>
      <version>2.5.4</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.3</version>
        <configuration>
          <source>${java.version}</source>
          <target>${java.version}</target>
          <optimize>true</optimize>
          <debug>true</debug>
        </configuration>
      </plugin>
    </plugins>
  </build>

</project>

Был бы признателен за любые предложения.... Спасибо!


person Morkus    schedule 05.01.2017    source источник
comment
Я не совсем знаком с искрой, но поскольку у вас есть maven, а это pom, это звучит как работа для плагин Maven Shade.   -  person Compass    schedule 05.01.2017
comment
Плагин сборки maven поможет, но если у вас есть исходники, вы всегда можете выполнить его как задачу maven, а maven позаботится о зависимостях.   -  person Kalpesh Soni    schedule 05.01.2017


Ответы (2)


Здесь вам нужен исполняемый файл jar, который будет содержать не только ваши классы, но и классы из всех ваших зависимостей. Для этого вы можете использовать плагин сборки Maven.

См. пример кода ниже.

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>3.0.0</version>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
          <archive>
            <manifest>
              <mainClass>org.sample.App</mainClass>     // specify your main class here
            </manifest>
          </archive>
        </configuration>
        <executions>
          <execution>
            <id>make-assembly</id> <!-- this is used for inheritance merges -->
            <phase>package</phase> <!-- bind to the packaging phase -->
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      [...]
</project>

Затем запустите mvn package, и исполняемый файл jar должен находиться в папке target (с именем вроде ProjectName-1.0-SNAPSHOT-jar-with-dependencies.jar).

person RITZ XAVI    schedule 05.01.2017
comment
Это отлично работает! Спасибо!!! Я только что использовал неправильную настройку Maven Intellij? Я думал, что Maven позаботился об этом, поэтому, должно быть, я создал проект, используя слишком простую настройку Maven? - person Morkus; 06.01.2017
comment
По умолчанию maven не будет упаковывать никакие зависимые банки при сборке и упаковке приложения. Maven был разработан больше для целей J2EE. Если ваше приложение содержит основной класс, и вы хотели бы его выполнить (сгенерированный вами jar-файл), то вам потребуется, чтобы все ваши зависимости также присутствовали в вашем пути к классам (приложение, имеющее основной класс). Это не поведение по умолчанию, предлагаемое maven. Следовательно, вам нужно будет явно указать maven для создания исполняемого jar-файла со всеми зависимостями, которые также будут упакованы с jar-файлом вашего приложения. - person RITZ XAVI; 06.01.2017

Похоже, вы ищете плагин сборки maven

Добавьте это в раздел плагинов и запустите mvn package

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.0.0</version>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
    <executions>
        <execution>
            <id>assemble-all</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>
person ravindrab    schedule 05.01.2017