spring 和hibernate项目制作可执行的jar包

spring 和hibernate项目制作可执行的jar包

如何把spring和hibernate项目制作可运行的jar包呢?

就是在命令行中运行 Java -jar  xxx.jar 就可以运行java程序.例如

 我的这个项目使用了hibernate和spring,不是web项目.

构建工具:maven

IDE:eclipse

目录结构如下:

 


 

上图中beans.xml是spring的配置文件,内容如下:

 

Xml代码  

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
  4.     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  6.            http://www.springframework.org/schema/beans/spring-beans-3.2.xsd  
  7.             http://www.springframework.org/schema/context  
  8.            http://www.springframework.org/schema/context/spring-context-3.2.xsd  
  9.            http://www.springframework.org/schema/aop  
  10.            http://www.springframework.org/schema/aop/spring-aop-3.2.xsd  
  11.            http://www.springframework.org/schema/tx   
  12.            http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"  
  13.     default-lazy-init="false">  
  14.   
  15.   
  16. <bean id="dataSource" destroy-method="close"  
  17.         class="org.apache.commons.dbcp.BasicDataSource">  
  18.         <property name="driverClassName" value="${jdbc.driverClassName}" />  
  19.         <property name="url" value="${jdbc.url}" />  
  20.         <property name="username" value="${jdbc.username}" />  
  21.         <property name="password" value="${jdbc.password}" />  
  22.     </bean>  
  23.     <bean  
  24.         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  25.         <property name="locations">  
  26.             <value>classpath:jdbc.properties</value>  
  27.         </property>  
  28.     </bean>  
  29.   
  30.     <bean id="sessionFactory"  
  31.         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  32.         <property name="dataSource" ref="dataSource" />  
  33.         <!--<property name="packagesToScan"> <list> <value>com.pass.bean</value>   
  34.             </list> </property> -->  
  35.         <property name="hibernateProperties">  
  36.             <props>  
  37.                 <prop key="hibernate.dialect">  
  38.                     org.hibernate.dialect.Oracle10gDialect  
  39.                 </prop>  
  40.                 <prop key="hibernate.default_schema">whuang</prop>  
  41.                 <prop key="hibernate.cache.provider_class">  
  42.                     org.hibernate.cache.EhCacheProvider  
  43.                 </prop>  
  44.                 <prop key="hibernate.cache.provider_configuration_file_resource_path">  
  45.                     com/config/core/ehcache.xml  
  46.                 </prop>  
  47.                 <prop key="hibernate.cache.use_second_level_cache">true</prop>  
  48.                 <prop key="hibernate.cache.use_query_cache">false</prop>  
  49.                 <prop key="hibernate.cache.use_minimal_puts">true</prop>  
  50.                 <!-- Cache complete -->  
  51.   
  52.                 <prop key="hibernate.order_updates">true</prop>  
  53.                 <prop key="hibernate.generate_statistics">true</prop>  
  54.                   
  55.                 <!-- org.hibernate.dialect.PostgreSQLDialect -->  
  56.                 <prop key="hibernate.show_sql">false</prop>  
  57.                 <prop key="hibernate.format_sql">true</prop>  
  58.                 <prop key="hibernate.hbm2ddl.auto">update</prop>  
  59.                 <prop key="hibernate.use_sql_comments">true</prop>  
  60.                 <prop key="current_session_context_class">thread</prop>  
  61.                 <prop key="javax.persistence.validation.mode">none</prop>  
  62.             </props>  
  63.         </property>  
  64.         <property name="mappingLocations">  
  65.             <list>  
  66.                 <value>classpath:com/provider/mapping/*.hbm.xml</value>  
  67.             </list>  
  68.         </property>  
  69.     </bean>  
  70.   
  71.   
  72.     <bean id="txManager"  
  73.         class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  74.         <property name="sessionFactory" ref="sessionFactory"></property>  
  75.     </bean>  
  76.     <!-- 事务的注解,如 @Transactional(readOnly=true) <tx:annotation-driven transaction-manager="txManager"   
  77.         /> -->  
  78.   
  79.       
  80.   
  81.     <aop:config>  
  82.         <aop:pointcut id="bussinessService"  
  83.             expression="execution(public   
  84.         * com.dao..*.*(..)) || execution(public   
  85.         * com.common.dao.generic.*.*(..))" />  
  86.         <aop:advisor pointcut-ref="bussinessService" advice-ref="txAdvice" />  
  87.   
  88.   
  89.     </aop:config>  
  90.     <tx:advice id="txAdvice" transaction-manager="txManager">  
  91.         <tx:attributes>  
  92.             <tx:method name="load*" read-only="true" />  
  93.             <tx:method name="list*" read-only="true" />  
  94.             <tx:method name="get*" read-only="true" />  
  95.             <tx:method name="contain*" read-only="true" />  
  96.             <tx:method name="find*" read-only="true" />  
  97.             <tx:method name="test*" read-only="true" />  
  98.             <tx:method name="is*" read-only="true" />  
  99.             <tx:method name="show*" read-only="true" />  
  100.             <tx:method name="delete*" propagation="REQUIRED" />  
  101.             <tx:method name="update*" propagation="REQUIRED" />  
  102.             <tx:method name="save*" propagation="REQUIRED" />  
  103.             <tx:method name="add*" propagation="REQUIRED" />  
  104.             <tx:method name="add*" propagation="REQUIRED" />  
  105.             <tx:method name="set*" propagation="REQUIRED" />  
  106.             <tx:method name="verify*" read-only="true" />  
  107.             <tx:method name="max*" read-only="true" />  
  108.             <tx:method name="min*" read-only="true" />  
  109.             <tx:method name="dis*" read-only="true" />  
  110.         </tx:attributes>  
  111.     </tx:advice>  
  112.       
  113.   
  114. </beans>  

 

 

jdbc.properties内容:

 

Java代码  

  1. jdbc.driverClassName=oracle.jdbc.driver.OracleDriver  
  2. jdbc.url=jdbc:oracle:thin:@localhost:1521:whuang  
  3. jdbc.username=whuang  
  4. jdbc.password=whuang  

 

 

如何打成可执行的jar包呢?

(1)修改读取spring配置文件的方式

在eclipse中使用

 

Java代码  

  1. new ClassPathXmlApplicationContext("beans.xml", "dao.xml");  

 打成jar包的话,要改成:

 

 

Java代码  

  1. new FileSystemXmlApplicationContext("beans.xml", "dao.xml");  

 

 

(2)修改beans.xml中读取jdbc.properties的方式

原来是:

 

Xml代码  

  1. <bean  
  2.         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  3.         <property name="locations">  
  4.             <value>classpath:jdbc.properties</value>  
  5.         </property>  
  6.     </bean>  

 打成jar,就需要改为:

 

 

Xml代码  

  1. <bean  
  2.         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  3.         <property name="locations">  
  4.             <value>jdbc.properties</value>  
  5.         </property>  
  6.     </bean>  

 

 

(3)maven中生成可执行jar的方式需要改maven plugin

原来使用

 

Xml代码  

  1. <plugin>  
  2.                 <artifactId>maven-assembly-plugin</artifactId>  
  3.                 <configuration>  
  4.                     <appendAssemblyId>false</appendAssemblyId>  
  5.                     <descriptorRefs>  
  6.                         <descriptorRef>jar-with-dependencies</descriptorRef>  
  7.                     </descriptorRefs>  
  8.                     <archive>  
  9.                         <manifest>  
  10.                             <mainClass>com.jn.NotepadApp</mainClass>  
  11.                         </manifest>  
  12.                     </archive>  
  13.                 </configuration>  
  14.                 <executions>  
  15.                     <execution>  
  16.                         <id>make-assembly</id>  
  17.                         <phase>package</phase>  
  18.                         <goals>  
  19.                             <goal>assembly</goal>  
  20.                         </goals>  
  21.                     </execution>  
  22.                 </executions>  
  23.             </plugin>  

 打成jar,就需要改为:

 

 

Java代码  

  1. <plugin>  
  2.                 <groupId>org.apache.maven.plugins</groupId>  
  3.                 <artifactId>maven-shade-plugin</artifactId>  
  4.                 <version>1.4</version>  
  5.                 <executions>  
  6.                     <execution>  
  7.                         <phase>package</phase>  
  8.                         <goals>  
  9.                             <goal>shade</goal>  
  10.                         </goals>  
  11.                         <configuration>  
  12.                             <transformers>  
  13.                                 <transformer  
  14.                                     implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">  
  15.                                     <mainClass><span style="font-size: 1em; line-height: 1.5;">com.jn.NotepadApp</span><span style="font-size: 1em; line-height: 1.5;"></mainClass></span>  
  16.                                 </transformer>  
  17.                                 <transformer  
  18.                                     implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">  
  19.                                     <resource>META-INF/spring.handlers</resource>  
  20.                                 </transformer>  
  21.                                 <transformer  
  22.                                     implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">  
  23.                                     <resource>META-INF/spring.schemas</resource>  
  24.                                 </transformer>  
  25.                             </transformers>  
  26.                         </configuration>  
  27.                     </execution>  
  28.                 </executions>  
  29.             </plugin>  

 

 

打开cmd,进入项目所在目录

运行 mvn clean package -U

就可以生成jar包:original-hibernate_spring_executable-0.0.1-SNAPSHOT.jar和hibernate_spring_executable-0.0.1-SNAPSHOT.jar,不用管original-hibernate_spring_executable-0.0.1-SNAPSHOT.jar,

(4)此时还要删除jar包中的META-INF\BCKEY.DSA,否则报错:

Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes

参考:http://hw1287789687.iteye.com/blog/2019501

注意:

(a)打成jar包后,需要把spring的配置文件拷贝到jar包同级目录,所以读取spring配置文件使用FileSystemXmlApplicationContext,而不是ClassPathXmlApplicationContext


 

 

(b)jdbc.properties也在jar同级目录,所以需要修改beans.xml中org.springframework.beans.factory.config.PropertyPlaceholderConfigurer配置,去掉classpath:.

(c)其实在生成的jar包中也有一份beans.xml,dao.xml.jdbc.properties,

 做上述的修改(蓝色标记)只是为了让jar读取文件系统(与jar同级目录)中的配置文件,而不是jar包里面的配置文件.

时间: 2024-09-16 21:52:41

spring 和hibernate项目制作可执行的jar包的相关文章

用命令行编译java并生成可执行的jar包

用命令行编译java并生成可执行的jar包 1.编写源代码. 编写源文件:CardLayoutDemo.java并保存,例如:I:\myApp\CardLayoutDemo.java.程序结构如下: package test; import java.awt.*; import javax.swing.*; //更多包的导入... class NotePadFrame extends JFrame { //主界面的设计... } //其他相关代码... public class CardLayo

android-用fatjar打包的Android项目(有调用第三方jar包),调用时找不到第三方jar包的方法

问题描述 用fatjar打包的Android项目(有调用第三方jar包),调用时找不到第三方jar包的方法 用fatjar打包的Android项目(有调用第三方jar包),调用里面的方法时找不到第三方jar包的方法,这是什么问题呢?下面是报的错误,在网上找了很多方法也没有解决: 解决方案 Android项目打第三方jar包

idea-IDEA生成可执行的jar包时候如何自动生成MANIFEST中的ClassPath

问题描述 IDEA生成可执行的jar包时候如何自动生成MANIFEST中的ClassPath 用eclipse导出可执行的jar包的时候可以自动把需要的依赖包打包到生成的jar包中,并且能自动把添加的包添加到MANIFEST.MF中的Rsrc-Class-Path 因为依赖的Jar包数量很多,有何办法能像eclipse,自动把依赖的包打包到生成的jar包中,自动生成MANIFEST中的Class-Path?

02_MyBatis项目结构,所需jar包,ehcache.xml配置,log4j.properties,sqlMapConfig.xml配置,SqlMapGenerator.xml配置

 项目结构(所需jar包,配置文件) sqlMapConfig.xml的配置内容如下: <?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPEconfiguration PUBLIC"-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <con

Spring+Hibernate+Struts2整合所需要的Jar包

struts2.1.6 支持jar包 xwork-2.1.2.jar struts2-core-2.1.6.jar commons-logging-1.0.4.jar freemarker-2.3.13.jar ognl-2.6.11.jar commons-fileupload-1.2.1.jar spring2.5.6支持jar包 spring.jar cglib-nodep-2.1_3.jar dom4j-1.6.1.jar log4j-1.2.15.jar commons-logging

Spring的jar包详解

  org.springframework.aop --Spring的面向切面编程,提供AOP(面向切面编程)的实现 org.springframework.asm--spring 2.5.6的时候需要asm jar包,spring3.0开始提供它自己独立的asm jar包 org.springframework.aspects--Spring提供的对AspectJ框架的整合 org.springframework.beans--所有应用都用到,包含访问配置文件,创建和管理bean等,是Spri

使用eclipse创建java程序可执行jar包

一.eclipse中,在要打成jar包的项目名上右击,出现如下弹出框,选择"export": 二.在接下来出现的界面中点击"jar file",然后next: 三.在接下来出现的界面中,如图所示勾选上要打包的项目以及其他选项,例如test项目:然后点击右边箭头所指的browse,选择打好的jar包要保存的目录,同时给自己的jar包命名,例如我这里选择存放在桌面,名字为jarTest;然后点击"next",在之后弹出的界面中再点击一次"n

Eclipse创建java程序可执行jar包教程_java

一.eclipse中,在要打成jar包的项目名上右击,出现如下弹出框,选择"export": 二.在接下来出现的界面中点击"jar file",然后next: 三.在接下来出现的界面中,如图所示勾选上要打包的项目以及其他选项,例如test项目:然后点击右边箭头所指的browse,选择打好的jar包要保存的目录,同时给自己的jar包命名,例如我这里选择存放在桌面,名字为jarTest;然后点击"next",在之后弹出的界面中再点击一次"n

android-关于eclipse中Android项目导入jar包的问题

问题描述 关于eclipse中Android项目导入jar包的问题 本人刚刚开始自学Android robotium自动化测试. 学习写一个计算器测试的例子, 可是新建完Android Test Project(已导入源代码), 在工程下创建了libs文件夹,可是右键Build Path这一项中没有"add to build path"这一项 另外有人告诉了我右键工程也可以直接添加jar包,我想知道右键直接在工程中添加跟新建文件夹添加有何区别? 求大神指教!!! 解决方案 eclips