Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 运行使用带有Spring依赖项的Maven插件打包的runnable Jar时出现问题_Java_Spring_Maven - Fatal编程技术网

Java 运行使用带有Spring依赖项的Maven插件打包的runnable Jar时出现问题

Java 运行使用带有Spring依赖项的Maven插件打包的runnable Jar时出现问题,java,spring,maven,Java,Spring,Maven,我使用maven汇编插件创建了一个可运行的jar: <build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manife

我使用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>

maven汇编插件
com.loaders.FundLoader
带有依赖项的jar
我在jar中打包了一些Spring依赖项。 当我使用intellIj运行程序时,程序运行得非常好。 但是,当我使用:java-jar myjar.jar从命令行运行程序时 我得到了以下例外:

线程“main”org.springframework.beans.factory.xml.XmlBeanDefiniti中出现异常 onStoreException:类路径资源[spring/loader context.XML]的XML文档中的第6行无效;嵌套异常是org.xml.sax.SAXParseExceptio N行号:6;栏目号:120;cvc elt.1:找不到e的声明 “豆子”

附加我的配置文件: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>

类路径:hibernate.properties
然后是my 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>

4.0.0
com.operations
父母亲
3.0.2-快照
装载机
[用于]加载器
罐子
maven汇编插件
com.loaders.FundLoader
带有依赖项的jar
net.sf.opencsv
opencsv
2.3
com.oracle
ojdbc14
10.2.0.4.0
公地郎
公地郎
2.5
编译
org.springframework
spring上下文
3.0.5.1发布
org.springframework
春豆
3.0.5.1发布
公共dbcp
公共dbcp
1.4
运行时

有人能帮我吗


谢谢

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

当您将所有依赖项放在最后一个JAR中时,很明显,结果JAR中只有一个
spring.schemas
文件,这就是您的问题所在

我建议您在开发应用程序时使用这两种方法中的任何一种,因为它包含一个可以很好地处理SpringJAR的插件

或者您也可以使用,它还以一种特定的方式包装胖罐,以避免出现此问题

还存在其他解决方案,例如


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

这不是真的,您可以将其完美地打包为一个jar,您甚至可以使用
maven shade插件
您必须注意将所有不同的
spring.schema
spring.handlers
合并到一个大文件中。看,我不知道你是否可以打包成一场战争,但是Tome提出的onejar maven插件很有魅力。所以我给出的答案是正确的。谢谢我@的确,
maven shade插件也提供了一种方法,我将把它添加到响应中。我发现嵌套JARs结构更容易,就像这样,你不必知道所有需要合并的东西。这个答案很好,但它确实应该改变,不要说这不可能做到,因为它显然可以做到,而且你也提到了自己做这件事的方法。