Java 如何创建一个胖罐子?

Java 如何创建一个胖罐子?,java,maven,intellij-idea,jar,spark-java,Java,Maven,Intellij Idea,Jar,Spark Java,有了SpringBoot,您就有了@SpringBootApplication注释,但是与neat Java Spark框架的等价物是什么呢 IntelliJ创建了一个Maven项目,我添加了spark依赖项,但是运行安装目标时,我得到了一个没有清单的5 KB jar。不是一个可执行的jar 迄今为止创建的pom.xml如下所示: 4.0.0 斯巴克德莫 斯巴克德莫 1 罐子 斯巴克德莫 http://maven.apache.org UTF-8 朱尼特 朱尼特 3.8.1 测试 com.sp

有了SpringBoot,您就有了
@SpringBootApplication
注释,但是与neat Java Spark框架的等价物是什么呢

IntelliJ创建了一个Maven项目,我添加了spark依赖项,但是运行安装目标时,我得到了一个没有清单的5 KB jar。不是一个可执行的jar

迄今为止创建的
pom.xml
如下所示:


4.0.0
斯巴克德莫
斯巴克德莫
1
罐子
斯巴克德莫
http://maven.apache.org
UTF-8
朱尼特
朱尼特
3.8.1
测试
com.sparkjava
火花芯
2.5.4
org.apache.maven.plugins
maven编译器插件
3.3
${java.version}
${java.version}
真的
真的

如果您有任何建议,我将不胜感激……谢谢

看起来您正在寻找maven汇编插件

将其添加到插件部分并运行
mvn包

<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>

org.apache.maven.plugins
maven汇编插件
3.0.0
带有依赖项的jar
集合所有
包裹
单一的

这里需要的是一个可执行的jar,它不仅包含您的类,还包含来自所有依赖项的类。 为此,您可以使用

请参见下面的示例代码

<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>

[...]
[...]
maven汇编插件
3.0.0
带有依赖项的jar
org.sample.App//在此处指定主类
组装
包裹
单一的
[...]

然后,运行
mvn package
,可执行jar应该位于文件夹
target
(名称类似于
ProjectName-1.0-SNAPSHOT-jar-with-dependencies.jar
)。

我对spark不太熟悉,但既然你有maven,而且这是一个pom,这听起来像是.maven汇编插件的工作,但是,如果您有源代码,您可以始终将其作为maven任务执行,maven将处理依赖项。这很好!非常感谢。我只是使用了错误的Maven Intellij设置吗?我以为Maven会处理这些东西,所以我一定是使用太基本的Maven设置创建了项目?默认情况下,Maven在构建和打包应用程序时不会打包任何依赖的JAR。Maven的设计更多是为了J2EE目的。如果您的应用程序包含一个主类,并且您希望执行它(您生成的jar),那么您将需要所有依赖项也出现在您的类路径上(具有主类的应用程序)。这不是maven提供的默认行为。因此,您必须明确地告诉maven构建一个可执行的jar,其中所有依赖项也将与您的应用程序jar一起打包。既然我的解决方案有效,介意接受它作为一个答案并对其进行投票吗?如果您解释一下我是如何做到这一点的,我很乐意接受它作为一个答案。我没有看到任何明显的“这就是答案”类型的东西可以点击。谢谢。@Morkus,我的答案旁边会有一个记号。为了接受正确答案,你只需点击勾号。那时它会变成绿色的。