嗨,春靴Maven-
我正在尝试创建一个springbootuberjar,它需要部署到apachestorm集群。但是,问题是,当使用“springbootmaven插件”打包时,storm希望所有类文件都在jar的根目录下,而打包的应用程序文件在“bootinf/classes”下。
有没有办法让我的应用程序类直接打包在根目录下而不是“boot-inf/classes”?
我尝试使用“maven assembly plugin”和“spring boot maven plugin”,如下所示,它创建了一个uber jar,其中包含了uber jar根目录下打包的依赖jar中的所有类文件,但是app类仍然在boot inf/classes中。
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.apache.storm</groupId>
<artifactId>storm-core</artifactId>
</exclude>
</excludes>
<requiresUnpack>
<dependency>
<groupId>com.myorg</groupId>
<artifactId>my-app-artifact</artifactId> <!-- This does not help! :( -->
</dependency>
</requiresUnpack>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
2条答案
按热度按时间t8e9dugd1#
所以,对于我未来的自己或者任何试图为类似问题找到答案的人来说。以下是我在研究过程中发现的不同的东西-
storm需要一个可执行的JavaJAR文件
springboot提供了一个定制的jar Package 。虽然springboot使用javajar打包进行确认,但它从boot-inf/classes加载类
因此,要使spring引导jar在storm集群上工作,同时充当spring引导-我们需要创建一个从boot-inf/classes到jar文件根目录的所有类的副本。
这可能吗?答案是肯定的。
使用这里描述的方法,我能够创建一个springbootjar,其中bootinf/类被复制到springbootjar的根目录。这种方法需要ant build.xml、ivy设置和ivy.xml,如下所示(免责声明:配置仅在 Package 上测试(不在storm群集上测试)
因为我们能够创建一个spring启动jar,它在根目录下用类进行黑客攻击-
我们应该这样做吗?不。
原因如下-
spring强烈建议不要采用这种方法,以免在jar文件中使用相同名称和不同版本的类出现不必要的类覆盖和类版本控制问题。
springbootjar打包不是一种用作依赖jar的格式。读第一行。因此,对于依赖用例,您需要坚持使用普通的旧java模块。springboot适用于更多的独立可执行文件或部署在像tomcat这样的容器上。
祝你好运!
编译文件
ivysettings.xml文件
常春藤.xml
cdmah0mi2#
有没有办法让我的应用程序类直接打包在根目录下而不是“boot-inf/classes”?
是的,你只需要使用Spring Boot1.3。回到maven。。。在pom.xml中,如果您这样声明父级:
然后您的类(和其他文件)将被放置在根级别。这是Spring Boot的“老办法”。
在版本1.4中,他们更改了spring引导jar结构,以使用boot-inf目录。所以,如果你用
<version>1.4.1.RELEASE</version>
例如,您的类将在boot inf/classes下。一个不受欢迎的副作用是,配置文件(例如application.properties、application-myprofile.properties等)也将在boot-inf/classes下,即使它们不是java类。