Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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
Maven汇编插件,包括多个版本的Spring XSD文件_Spring_Maven - Fatal编程技术网

Maven汇编插件,包括多个版本的Spring XSD文件

Maven汇编插件,包括多个版本的Spring XSD文件,spring,maven,Spring,Maven,我们正在使用Maven将Spring应用程序打包到一个jar中。最初,为了进行测试,我正在构建一个包含Eclipse中所有依赖项jar的文件夹: 文件->导出->运行Jar->将所需库复制到子文件夹中 (这实际上也创建了应用程序jar,但我使用Maven构建了ISE Eclipse) 应用程序在命令行中运行良好。现在,我已经将程序集插件(jarwithdependencies)添加到pom.xml中,并使用它生成一个jar,其中包含所有依赖jar中的所有类。这不会运行,问题似乎是依赖项jar中包

我们正在使用Maven将Spring应用程序打包到一个jar中。最初,为了进行测试,我正在构建一个包含Eclipse中所有依赖项jar的文件夹: 文件->导出->运行Jar->将所需库复制到子文件夹中

(这实际上也创建了应用程序jar,但我使用Maven构建了ISE Eclipse)

应用程序在命令行中运行良好。现在,我已经将程序集插件(
jarwithdependencies
)添加到pom.xml中,并使用它生成一个jar,其中包含所有依赖jar中的所有类。这不会运行,问题似乎是依赖项jar中包含了各种springxsd文件的多个版本

我构建了一个maven依赖关系树(
mvn dependency:tree>dependencies.txt
),但这无助于显示导致此问题的原因,因为它只显示JAR之间的依赖关系,而不是在类或文件级别。以下是我们构建中的JAR:

<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-oxm</artifactId>
   <version>3.2.0.RELEASE</version>
</dependency>

<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>org.springframework.jdbc</artifactId>
   <version>3.2.0.RELEASE</version>
</dependency>

<dependency>
   <groupId>org.springframework.batch</groupId>
   <artifactId>spring-batch-core</artifactId>
   <version>2.2.6.RELEASE</version>
</dependency>

<dependency>
   <groupId>org.springframework.batch</groupId>
   <artifactId>spring-batch-infrastructure</artifactId>
   <version>2.2.6.RELEASE</version>
</dependency>

<dependency>
   <groupId>org.springframework.batch</groupId>
   <artifactId>spring-batch-test</artifactId>
   <version>2.2.6.RELEASE</version>
</dependency>

<dependency>
   <groupId>org.springframework.batch</groupId>
   <artifactId>spring-batch-admin-parent</artifactId>
   <version>1.2.2.RELEASE</version>
   <type>pom</type>
</dependency>

<dependency>
   <groupId>org.springframework.batch</groupId>
   <artifactId>spring-batch-admin-manager</artifactId>
   <version>1.2.2.RELEASE</version>
</dependency>

<dependency>
   <groupId>org.springframework.batch</groupId>
   <artifactId>spring-batch-admin-resources</artifactId>
   <version>1.2.2.RELEASE</version>
</dependency>

<dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>4.7</version>
   <scope>test</scope>
</dependency>

<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-test</artifactId>
   <version>3.2.0.RELEASE</version>
   <scope>test</scope>
</dependency>

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

<dependency>
   <groupId>log4j</groupId>
   <artifactId>log4j</artifactId>
   <version>1.2.14</version>
</dependency>

<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-api</artifactId>
   <version>1.5.8</version>
</dependency>

<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-log4j12</artifactId>
   <version>1.5.8</version>
</dependency>

<dependency>
   <groupId>com.oracle</groupId>
   <artifactId>ojdbc6</artifactId>
   <version>11.2.0.2.0</version>
</dependency>

<dependency>
   <groupId>org.codehaus.castor</groupId>
   <artifactId>com.springsource.org.castor</artifactId>
   <version>1.2.0</version>
</dependency>

<dependency>
   <groupId>javax.xml.bind</groupId>
   <artifactId>jaxb-api</artifactId>
   <version>2.2.11</version>
</dependency>

<dependency>
   <groupId>org.apache.activemq</groupId>
   <artifactId>activemq-core</artifactId>
   <version>5.7.0</version>
</dependency>

<dependency>
   <groupId>javax.jms</groupId>
   <artifactId>jms</artifactId>
   <version>1.1</version>
   <type>pom</type>
</dependency>

<dependency>
   <groupId>cglib</groupId>
   <artifactId>cglib-nodep</artifactId>
   <version>2.2</version>
</dependency>

<dependency>
   <groupId>net.sourceforge.jtds</groupId>
   <artifactId>com.springsource.net.sourceforge.jtds</artifactId>
   <version>1.2.2</version>
</dependency>

<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>org.springframework.jms</artifactId>
   <version>3.2.4.RELEASE</version>
</dependency>

<dependency>
   <groupId>org.springframework.integration</groupId>
   <artifactId>spring-integration-core</artifactId>
   <version>2.2.6.RELEASE</version>
</dependency>

<dependency>
   <groupId>org.springframework.integration</groupId>
   <artifactId>spring-integration-jms</artifactId>
   <version>2.2.6.RELEASE</version>
</dependency>

<dependency>
   <groupId>org.springframework.integration</groupId>
   <artifactId>spring-integration-file</artifactId>
   <version>$2.2.6.RELEASE</version>
</dependency>

<dependency>
   <groupId>org.springframework.integration</groupId>
   <artifactId>spring-integration-xml</artifactId>
   <version>2.2.6.RELEASE</version>
</dependency>

<dependency>
   <groupId>org.springframework.integration</groupId>
   <artifactId>spring-integration-jdbc</artifactId>
   <version>${spring.integration.version}</version>
</dependency>

<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-aop</artifactId>
   <version>4.0.3.RELEASE</version>
</dependency>

<dependency>
   <groupId>org.aspectj</groupId>
   <artifactId>com.springsource.org.aspectj.tools</artifactId>
   <version>1.6.12.RELEASE</version>
</dependency>

<dependency>
   <groupId>org.aspectj</groupId>
   <artifactId>com.springsource.org.aspectj.runtime</artifactId>
   <version>1.7.2.RELEASE</version>
</dependency>

<dependency>
   <groupId>org.aspectj</groupId>
   <artifactId>com.springsource.org.aspectj.weaver</artifactId>
   <version>1.7.2.RELEASE</version>
</dependency>

<dependency>
   <groupId>com.solace</groupId>
   <artifactId>sol-common</artifactId>
   <version>6.0.0.146</version>
</dependency>

<dependency>
   <groupId>com.solace</groupId>
   <artifactId>sol-jms</artifactId>
   <version>6.0.0.146</version>
</dependency>

<dependency>
   <groupId>com.solace</groupId>
   <artifactId>sol-jcsmp</artifactId>
   <version>6.0.0.146</version>
</dependency>

org.springframework
弹簧oxm
3.2.0.1发布
org.springframework
org.springframework.jdbc
3.2.0.1发布
org.springframework.batch
弹簧批芯
2.2.6.1发布
org.springframework.batch
spring批处理基础架构
2.2.6.1发布
org.springframework.batch
弹簧批量试验
2.2.6.1发布
org.springframework.batch
spring批处理管理父级
1.2.2.1发布
聚甲醛
org.springframework.batch
spring批处理管理器
1.2.2.1发布
org.springframework.batch
spring批处理管理资源
1.2.2.1发布
朱尼特
朱尼特
4.7
测试
org.springframework
弹簧试验
3.2.0.1发布
测试
org.springframework
spring上下文
3.2.0.1发布
log4j
log4j
1.2.14
org.slf4j
slf4j api
1.5.8
org.slf4j
slf4j-log4j12
1.5.8
com.oracle
ojdbc6
11.2.0.2.0
org.codehaus.castor
com.springsource.org.castor
1.2.0
javax.xml.bind
jaxb api
2.2.11
org.apache.activemq
activemq内核
5.7.0
javax.jms
jms
1.1
聚甲醛
cglib
cglibnodep
2.2
net.sourceforge.jtds
com.springsource.net.sourceforge.jtds
1.2.2
org.springframework
org.springframework.jms
3.2.4.1发布
org.springframework.integration
spring集成核心
2.2.6.1发布
org.springframework.integration
spring集成jms
2.2.6.1发布
org.springframework.integration
spring集成文件
$2.2.6.0发行
org.springframework.integration
spring集成xml
2.2.6.1发布
org.springframework.integration
spring集成jdbc
${spring.integration.version}
org.springframework
春季aop
4.0.3.1发布
org.aspectj
com.springsource.org.aspectj.tools
1.6.12.1发布
org.aspectj
com.springsource.org.aspectj.runtime
1.7.2.1发布
org.aspectj
com.springsource.org.aspectj.weaver
1.7.2.1发布
安慰
普通溶胶
6.0.0.146
安慰
索尔jms
6.0.0.146
安慰
溶胶jcsmp
6.0.0.146

非常感谢您的帮助。

是的,所有spring jar在各自的META inf中都有
spring.schema
spring.handlers
(负责名称空间处理)文件。这些文件将被彼此覆盖。您需要将(而不是程序集)与一起使用。两者结合后,将把相同文件名的文件内容合并到一个文件中。spring使用的插件示例如下:(从上面的ResourceTransformer链接获得)。两者结合后,将把相同文件名的文件内容合并到一个文件中

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.3</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                  <resource>META-INF/spring.handlers</resource>
                </transformer>
                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                  <resource>META-INF/spring.schemas</resource>
                </transformer>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

org.apache.maven.plugins
. 它使运行Spring应用程序变得更加容易,而不必处理这个问题

注意:仅供参考,xsd文件没有倍数。每个springjar都有自己的一组,具有不同的名称和版本。重复的是
spring.schema
spring.handlers
。它们处理每个JAR的名称空间“定向”。但是,当您使用汇编插件构建uber jar时,只会使用其中一个文件。因此,众多SpringJAR中的一个将能够处理名称空间


编辑:


很抱歉,我把你的标题看错了。xsd的版本没有什么区别。它们都是为了向后兼容。您操作使用的版本在xml应用程序上下文文件中指定,如果没有指定,则将使用最新版本

深入研究maven shade插件,在该插件中,您可以对这些文件之类的内容进行更细粒度的控制。