gpt4 book ai didi

java - 使用带有 Spring 依赖项的 Maven 插件运行可运行 Jar 时出现问题

转载 作者:行者123 更新时间:2023-12-02 04:30:04 25 4
gpt4 key购买 nike

我使用 Maven 程序集插件创建了一个可运行的 jar:

<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.loaders.FundLoader</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>

我有一些 Spring 依赖项打包到 jar 中。当我使用 intellIj 运行程序时,程序运行得很好。但是,当我使用以下命令从命令行运行程序时: java -jar myjar.jar我遇到以下异常:

线程“main”中的异常org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException:来自类路径资源 [spring/loader-context.xml] 的 XML 文档中的第 6 行无效;嵌套异常是 org.xml.sax.SAXParseException;行号:6;列数:120; cvc-elt.1:找不到 e 的声明lement“ bean ”。

附上我的配置文件:loader-context.xml

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">


<context:annotation-config />

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:hibernate.properties</value>
</list>
</property>
<property name="ignoreResourceNotFound" value="false"/>
</bean>


<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${hibernate.driver.class.name}" />
<property name="url" value="${hibernate.jdbc.url}" />
<property name="username" value="${hibernate.username}" />
<property name="password" value="${hibernate.password}" />
<property name="defaultAutoCommit" value="false" />
</bean>



</beans>

然后是我的pom.xml的内容:

  <?xml version="1.0" encoding="UTF-8"?>
<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>

<parent>
<groupId>com.operations</groupId>
<artifactId>parent</artifactId>
<version>3.0.2-SNAPSHOT</version>
</parent>

<artifactId>loader</artifactId>
<name>[FOR] loader</name>
<packaging>jar</packaging>

<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.loaders.FundLoader</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>




<dependencies>

<dependency>
<groupId>net.sf.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>2.3</version>
</dependency>


<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4.0</version>
</dependency>

<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.5</version>
<scope>compile</scope>
</dependency>


<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>

<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
<scope>runtime</scope>
</dependency>

</dependencies>

有人可以帮我吗?

谢谢

最佳答案

Spring 应用程序不能简单地使用 maven-assemble-plugin 打包为胖 JAR,因为每个 Spring 模块 JAR 的架构都位于始终位于同一位置的文件中 (META-INF/spring.schemas)。

当您将所有依赖项合并到一个最终 JAR 中时,显然您生成的 JAR 中将只有这些 spring.schemas 文件之一,因此会出现问题。

我建议使用 Spring Boot用于开发您的应用程序,因为它包含一个可以很好地处理 Spring JAR 的插件。

或者您也可以使用onejar-maven-plugin ,它还以特定方式打包 fat JAR,以避免出现此问题。

还存在其他解决方案,例如 maven-shade-plugin and its AppendingTransformer

您甚至可以自己提供有问题文件的合并版本作为项目资源,然后排除原始文件进行组装。

关于java - 使用带有 Spring 依赖项的 Maven 插件运行可运行 Jar 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31581415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com