2017-01-05 4 views
2

SpringBootでは、@SpringBootApplicationアノテーションがありますが、きちんとしたJava Sparkフレームワークと同等のものは何ですか?ファットジャーを作るには?

IntelliJはMavenプロジェクトを作成してスパークの依存関係を追加しましたが、インストールの目標を実行すると、マニフェストを持たない5 KBのjarファイルが作成されます。実行可能な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> 

が....おかげで任意の提案をお願い申し上げます!

+1

私は完全にスパークに精通していませんが、あなたがmavenを持っていてこれがpomなので、これは[Maven shade plugin](https://maven.apache.org/plugins/maven- shade-plugin/examples/executable-jar.html)を参照してください。 – Compass

+0

mavenアセンブリプラグインが助けになりますが、ソースがあればいつでもmavenタスクとして実行でき、mavenは依存関係を処理します –

答えて

7

を実行ルックスは、あなたのクラスが含まれていますだけでなく、実行可能なjarファイルですが、あなたのすべての依存関係のクラスも。 そのためには、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を実行し、実行可能なjarファイルは、(ProjectName-1.0-SNAPSHOT-jar-with-dependencies.jarような名前で)フォルダtargetに配置する必要があります。

+0

これは問題なく動作します!ありがとうございました!!! Maven Intellijセットアップを間違って使用しましたか? 私はMavenがこのようなことをやってくれたので、あまりにも基本的なMaven設定を使ってプロジェクトを作成したに違いないと思いましたか? – Morkus

+0

デフォルトでは、アプリケーションをビルドしてパッケージ化するとき、mavenは依存jarをパッケージ化しません。 MavenはJ2EE目的のためにより多く設計されています。アプリケーションにメインクラスが含まれていて、それを実行したい場合(生成するjar)、すべての依存関係がクラスパス(メインクラスを持つアプリケーション)にも存在する必要があります。これはmavenが提供するデフォルトの動作ではありません。したがって、明示的にmavenに実行可能なjarをビルドするように指示しなければなりません。すべての依存関係もアプリケーションjarにパッケージされています。 –

+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> 
関連する問題