2017-01-05 9 views
2

С SpringBoot у вас есть аннотация @SpringBootApplication, но что эквивалентно с опрятной инфраструктурой Java Spark?Как создать жирную банку?

IntelliJ создает проект Maven, и я добавил искровую зависимость, но, выполняя цель установки, я получаю банку размером 5 КБ без манифеста. Не исполняемый банку.

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> 

Оценил любые предложения .... Спасибо!

+1

Я не совсем знаком с искрою, но так как у вас есть maven, и это жуть, это звучит как работа для плагина [Maven shade] (https://maven.apache.org/plugins/maven- тень-плагин/примеры/исполняемый-jar.html). – Compass

+0

maven assembly plugin поможет, но если у вас есть источники, вы всегда можете выполнить его как задание maven, а maven будет заботиться о зависимостях –

ответ

7

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

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

<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 и исполняемая банка должна быть расположена в папке target (с именем, как ProjectName-1.0-SNAPSHOT-jar-with-dependencies.jar).

+0

Это работает отлично! Спасибо!!! Я использовал неправильную настройку Maven Intellij? Я думал, что Maven позаботился об этом, поэтому я, должно быть, создал проект, используя слишком базовую настройку Maven? – Morkus

+0

По умолчанию, maven не будет упаковывать любые зависимые баночки при создании и упаковке вашего приложения. Maven был разработан больше для целей J2EE. Если ваше приложение содержит основной класс, и вы хотите его выполнить (jar, который вы генерируете), вам понадобятся все ваши зависимости, которые также будут присутствовать в вашем пути к классам (приложение, имеющее основной класс). Это не поведение по умолчанию, предлагаемое maven. Следовательно, вам нужно будет явно указать maven для создания исполняемого банку со всеми зависимостями, которые также упаковываются вместе с вашим банком приложения. –

+0

Так как мое решение сработало, разум принял его как ответ и выложил его? –

0

Похоже, вы ищете 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> 

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

  • Нет связанных вопросов^_^