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包里面的配置文件.

相关文章
|
6月前
|
Java Spring
Spring boot 运行服务jar外配置配置文件方式总结
Spring boot 运行服务jar外配置配置文件方式总结
995 0
|
2月前
|
Java Kotlin 索引
学习Spring框架特性及jiar包下载
Spring 5作为最新版本,更新了JDK基线至8,修订了核心框架,增强了反射和接口功能,支持响应式编程及Kotlin语言,引入了函数式Web框架,并提升了测试功能。Spring框架可在其官网下载,包括文档、jar包和XML Schema文档,适用于Java SE和Java EE项目。
41 0
|
3月前
|
Java Apache Maven
Java/Spring项目的包开头为什么是com?
本文介绍了 Maven 项目的初始结构,并详细解释了 Java 包命名惯例中的域名反转规则。通过域名反转(如 `com.example`),可以确保包名的唯一性,避免命名冲突,提高代码的可读性和逻辑分层。文章还讨论了域名反转的好处,包括避免命名冲突、全球唯一性、提高代码可读性和逻辑分层。最后,作者提出了一个关于包名的问题,引发读者思考。
150 0
Java/Spring项目的包开头为什么是com?
|
6月前
|
Java
[JarEditor]可直接修改jar包的IDEA插件
### 修改JAR包变得更简单:JarEditor插件简介 **背景:** 开发中常需修改JAR包中的class文件,传统方法耗时费力。JarEditor插件让你一键编辑JAR包内文件,无需解压。 **插件使用:** 1. **安装:** 在IDEA插件市场搜索JarEditor并安装。 2. **修改class:** 打开JAR文件中的class,直接编辑,保存后一键构建更新JAR。 3. **文件管理:** 右键菜单支持在JAR内新增/删除/重命名文件等操作。 4. **搜索:** 使用内置搜索功能快速定位JAR包内的字符串。
606 2
[JarEditor]可直接修改jar包的IDEA插件
|
5月前
|
XML JSON Java
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
177 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
|
6月前
|
弹性计算 Java Serverless
Serverless 应用引擎操作报错合集之上传自定义JAR包,启动时报错,是什么导致的
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
5月前
|
前端开发 JavaScript Java
【Azure 应用服务】App Service For Windows 中如何设置代理实现前端静态文件和后端Java Spring Boot Jar包
【Azure 应用服务】App Service For Windows 中如何设置代理实现前端静态文件和后端Java Spring Boot Jar包
|
6月前
|
关系型数据库 Java 分布式数据库
PolarDB产品使用问题之部署到服务器上的Java应用(以jar包形式运行)无法连接,如何解决
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
5月前
|
Java 数据库连接 数据库
Spring Data JPA 与 Hibernate 之区别
【8月更文挑战第21天】
144 0