2016-02-27 22 views
1

我试图执行使用java -jar <myJarName>创建一个使用弹簧数据的JPA项目可执行的JAR和Maven

我试图创建这个罐子依赖多种方式一罐

  • 第一种方式

增加 “行家依赖” 和 “Maven的罐子” 插件POM文件

<build> 
    <plugins> 

     <plugin> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>install</phase> 
        <goals> 
         <goal>copy-dependencies</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>${project.build.directory}/lib</outputDirectory> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <configuration> 
       <useDefaultManifestFile>true</useDefaultManifestFile> 
       <archive> 
        <manifest> 
         <addClasspath>true</addClasspath> 
         <mainClass>fully.qualified.MainClass</mainClass> 
         <classpathPrefix>lib/</classpathPrefix> 
        </manifest> 
       </archive> 
      </configuration> 
     </plugin> 


    </plugins> 
</build> 

发生了什么这里是清单包含了所有的类路径,但是没有依赖性得到复制

  • 方式二

试过“Maven的组装插件”

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifest> 
         <mainClass>fully.qualified.MainClass</mainClass> 
        </manifest> 
       </archive> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
      </configuration> 
      <executions> 
       <execution> 
        <id>make-assembly</id> <!-- this is used for inheritance merges --> 
        <phase>package</phase> <!-- bind to the packaging phase --> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

第二个以jar-with-dependencies结尾的jar被创建出来,拥有我需要的所有东西。但调用的jar失败,错误

Exception in thread "main" org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/data/jpa] 
Offending resource: class path resource [META-INF/spring/app-context.xml] 

     at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:70) 
     at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85) 

我核实,META-INF/persistence.xml中存在

  • 第三条道路

试过行家遮阳帘插件

<build> 
    <plugins> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>2.1</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals><goal>shade</goal></goals> 
        <configuration> 
         <transformers> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
           <mainClass>fully.qualified.MainClass</mainClass> 
          </transformer> 
          <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> 

这一个太复制了所有的依赖关系,但失败并出现错误

[main] INFO org.springframework.jdbc.datasource.DriverManagerDataSource - Loaded JDBC driver: org.h2.Driver 
1022 [main] WARN org.springframework.context.support.ClassPathXmlApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in com.vmware.vra.performance.loganalyzer.Repository.JpaConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalStateException: No persistence units parsed from {classpath*:META-INF/persistence.xml} 
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in com.vmware.vra.performance.loganalyzer.Repository.JpaConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalStateException: No persistence units parsed from {classpath*:META-INF/persistence.xml} 
+0

您是如何解决问题的?我对第二个选项有同样的问题。 – crm86

回答

0

我和第二个选项一样,也有类似的问题。您遇到的问题是,您正在合并多个Spring依赖项,这些依赖项提供了工厂,处理程序,命名空间的每个定义,并且您遇到冲突。

解决这个问题的方法是检查所有这些定义的spring依赖关系,并将它们组合起来添加到项目中。欲了解更多详情,你可以看看这个blog entrythis maven module我组合的配置。

相关问题