当前位置: 首页 > 面试题库 >

如何使用Maven创建基于Spring的可执行jar?

景河
2023-03-14
问题内容

我有一个基于Maven的Spring-WS客户端项目,我希望将其打包为一个jar。在日食中,一切正常运行。当我尝试将其打包为可执行jar时,由于Spring
jar不包含在我的应用程序jar中,因此出现ClassNotFound异常。

因此,我添加了maven-shade-plugin以将我的所有依赖项都包含在应用程序jar中。当我查看我的应用程序jar时,会看到包含的所有依赖项中的所有类文件(所有库jar都爆炸了)。

<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>com.cws.cs.Client</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>1.7</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>

        </plugin>
    </plugins>
</build>

我的问题是,在打包过程中,我的多个spring依赖项具有彼此覆盖的不同META-INF /
spring.schemas
文件。因此,我的最终jar的spring.schemas文件不完整。

因此,当我尝试运行我的可执行jar时,由于Spring.schemas文件不完整(Spring-WS的jar已覆盖Spring-
core的spring.schemas文件),我收到了无法找到文件的Spring错误消息。

我的可执行jar的META-INF / spring.schemas:

http\://www.springframework.org/schema/web-services/web-services-1.5.xsd=/org/springframework/ws/config/web-services-1.5.xsd
http\://www.springframework.org/schema/web-services/web-services-2.0.xsd=/org/springframework/ws/config/web-services-2.0.xsd
http\://www.springframework.org/schema/web-services/web-services.xsd=/org/springframework/ws/config/web-services-2.0.xsd

代替Spring-beans.jar META-INF / spring.schemas:

http\://www.springframework.org/schema/beans/spring-beans-2.0.xsd=org/springframework/beans/factory/xml/spring-beans-2.0.xsd
http\://www.springframework.org/schema/beans/spring-beans-2.5.xsd=org/springframework/beans/factory/xml/spring-beans-2.5.xsd
http\://www.springframework.org/schema/beans/spring-beans-3.0.xsd=org/springframework/beans/factory/xml/spring-beans-3.0.xsd
http\://www.springframework.org/schema/beans/spring-beans-3.1.xsd=org/springframework/beans/factory/xml/spring-beans-3.1.xsd
http\://www.springframework.org/schema/beans/spring-beans.xsd=org/springframework/beans/factory/xml/spring-beans-3.1.xsd
http\://www.springframework.org/schema/tool/spring-tool-2.0.xsd=org/springframework/beans/factory/xml/spring-tool-2.0.xsd
http\://www.springframework.org/schema/tool/spring-tool-2.5.xsd=org/springframework/beans/factory/xml/spring-tool-2.5.xsd
http\://www.springframework.org/schema/tool/spring-tool-3.0.xsd=org/springframework/beans/factory/xml/spring-tool-3.0.xsd
http\://www.springframework.org/schema/tool/spring-tool-3.1.xsd=org/springframework/beans/factory/xml/spring-tool-3.1.xsd
http\://www.springframework.org/schema/tool/spring-tool.xsd=org/springframework/beans/factory/xml/spring-tool-3.1.xsd
http\://www.springframework.org/schema/util/spring-util-2.0.xsd=org/springframework/beans/factory/xml/spring-util-2.0.xsd
http\://www.springframework.org/schema/util/spring-util-2.5.xsd=org/springframework/beans/factory/xml/spring-util-2.5.xsd
http\://www.springframework.org/schema/util/spring-util-3.0.xsd=org/springframework/beans/factory/xml/spring-util-3.0.xsd
http\://www.springframework.org/schema/util/spring-util-3.1.xsd=org/springframework/beans/factory/xml/spring-util-3.1.xsd
http\://www.springframework.org/schema/util/spring-util.xsd=org/springframework/beans/factory/xml/spring-util-3.1.xsd

我很沮丧
我不确定是否/如何将所有内容打包为单个可执行jar。我不知道这是否是阴影插件配置问题,或者我是否正在尝试做一些不可能的事情。我不得不手动创建自己的spring.schemas文件(其他文件的串联)似乎并不正确。

我可能稍微跳了一下枪。在挖掘有关shade插件的更多信息时,我注意到我之前错过的AppendingTransformer。但是,我所关心的是如何知道哪些其他文件存在相同的问题?我发现/抓住了这个春季特刊。我不知道其他任何库可能正在做类似的事情…

任何建议,将不胜感激。


问题答案:

代替使用maven-shade-plugin,请使用onejar-maven-
plugin
。通过One-JAR,您可以将Java应用程序及其依赖项Jar打包到一个可执行的Jar文件中。



 类似资料:
  • 最近,我写了一个Spring-Boot项目,我希望Maven能够创建一个jar文件,我可以通过命令“java-jar”运行该文件。 这是我编写的pom.xml: 您能否考虑一种配置pom.xml文件的方法,使我能够使用“native”命令“mvn clean package”而不是繁琐的“mvn clean package spring-boot:repackage”获得jar文件? 谢谢

  • 我知道其他线程已经回答了这个问题,但没有一个对我有效,我尝试从eclipse创建一个可执行的jar文件,但这有其他问题。

  • 我需要从我的应用程序中制作一个可执行的jar包。 这是我的pom.xml: 我用mvn clean package-DskipTests=true构建包,并通过java-jar运行它,我得到了以下结果: mvn--version Apache Maven 3.6.0(NON-CANONICAL_2018-11-06T03:14:22 01:00_root;2018-11-06T03:14:22 0

  • 问题内容: 我想使用码头来启动我的应用程序,因此我添加了下面提到的依赖项。当我运行主要方法Jetty成功启动时(我正在一个struts2 + spring3 + hibernate maven项目中,我也可以将其部署在tomcat中) 现在,我想从war包装pom创建一个可执行jar。所以我在pom中添加了maven-assembly-plugin。(我尝试使用maven jar插件,但未添加依赖

  • 问题内容: 我不想将其打包在单个可执行jar中进行分发。我需要一个可执行文件,例如main.jar,所有依赖项都在libs / *。jar中 我如何才能使maven可执行jar不预先包含在其依赖库中? 在如何使用Maven创建具有依赖项的可执行JAR中?10年12月1日10:46回答了一条注释,安德烈·阿隆森(AndréAronsen),但那根本不起作用(未设置失败的sadescriptorRef

  • 问题内容: 我想将我的项目打包在一个可执行的JAR中进行分发。 如何使Maven项目将所有依赖JAR打包到我的输出JAR中? 问题答案: 然后用 编译目标应在Assembly:single:single之前添加,否则不包括您自己项目中的代码。 通常,此目标与自动执行的构建阶段相关。这样可以确保在执行mvn install或执行部署/发布时构建JAR 。