春天runnable jar在窗口上运行

时间:2014-08-01 17:07:18

标签: java eclipse spring

我创建了一个项目,它在eclipse上作为一个spring mvn项目开发,但后来不得不添加更多的jar,虽然没有添加mvn,所以我收集了一个文件夹中的所有jar并通过eclipse创建了一个runnable jar并尝试从命令提示符运行,它显示以下错误,它在eclipse中运行:

log4j:WARN No appenders could be found for logger (org.springframework.core.env.
StandardEnvironment).`enter code here`
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" org.springframework.beans.factory.parsing.BeanDefinit
ionParsingException: Configuration problem: Unable to locate Spring NamespaceHan
dler for XML schema namespace [http://www.springframework.org/schema/context]
Offending resource: class path resource 
        at org.springframework.beans.factory.parsing.FailFastProblemReporter.err
or(FailFastProblemReporter.java:68)

2 个答案:

答案 0 :(得分:1)

我建议使用Spring Boot来避免这个问题。使用Spring创建一个可运行的jar是一个令人头疼的问题,主要是因为重叠的spring.schemasspring.handler文件(负责查找NamespaceHandlers)。当您构建到一个jar时,Maven将覆盖这些文件。

但就目前而言,您可以查看Shade Plugin并使用ResourceTransformers

  

只要没有重叠,就可以将多个工件中的类/资源聚合成一个超级JAR。否则,需要某种逻辑来合并来自多个JAR的资源。这就是资源变压器的用武之地。

Shade插件网站的代码(后跟评论)

  <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>
  

某些jar包含具有相同文件名的其他资源(例如属性文件)。为避免覆盖,您可以选择通过将其内容附加到一个文件来合并它们。一个很好的例子就是聚合弹簧环和丛弹簧罐。它们都有META-INF/spring.handlers文件,Spring用它来处理XML模式命名空间。您可以使用AppendingTransformer

将所有文件的内容与该特定名称合并

答案 1 :(得分:0)

是的,Spring Boot非常适合这里。

我写了一些关于Spring Boot的教程。

从以下开始: