项目部署上线时需要打包,我们的项目是采用maven工程,打包时碰到过两个问题,做下记录:

1.Maven如何打入本地jar包

使用支付宝API时发现有些jar没有在中央仓库中,只能从支付宝下载jar,然后引入到项目中,这种情况下再使用平时的打包方式存在问题,需要做如下处理:
- 我在与src并列的目录下新建一个lib的文件夹,将支付宝的alipay-sdk-java-ALL20171128134549.jar包放在这个文件夹里面。
- pom的依赖中这样写:

      <dependency><groupId>com.aliyun</groupId><artifactId>alipay-sdk-java</artifactId><version>ALL20171128134549</version><scope>system</scope><systemPath>${basedir}/lib/alipay-sdk-java-ALL20171128134549.jar</systemPath></dependency>
  • pom的引入插件中这样写:
        <plugins><!--打包war,引入lib下的jar--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>2.2</version><configuration><warName>${project.artifactId}</warName><webResources><resource><directory>lib/</directory><targetPath>WEB-INF/lib</targetPath><includes><include>**/*.jar</include></includes></resource></webResources></configuration></plugin></plugins>

这样就可以在部署时将本地jar包打入war包中了。

2.使用maven的profiles动态选择配置文件

日常开发中通常会有开发环境和生产环境,配置文件一般都是在xxx.properties中配置着,如果变动比较少还尚可采用注释掉不用的配置,放开需要的配置,但是如果生产和开发好多配置文件都不一样,每次打包之前都要不停的改动,不紧浪费时间,而且顾此失彼容易出错,maven的profiles可以解决这个问题,我们只需要勾选需要的环境,就可以动态的打包出不同的配置了。如下图:

- pom.xml中的配置

<dependencies><dependency><groupId>com.aliyun</groupId><artifactId>alipay-sdk-java</artifactId><version>ALL20171128134549</version><scope>system</scope><systemPath>${basedir}/lib/alipay-sdk-java-ALL20171128134549.jar</systemPath></dependency></dependencies><profiles><profile><id>dev</id><properties><env>dev</env></properties><activation><activeByDefault>true</activeByDefault></activation></profile><profile><id>prod</id><properties><env>prod</env></properties></profile></profiles><build><finalName>scm</finalName><filters><filter>src/main/resources/profiles/${env}.properties</filter></filters><resources><resource><directory>src/main/resources</directory><filtering>true</filtering></resource></resources><plugins><!--打包war,引入lib下的jar--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>2.2</version><configuration><warName>${project.artifactId}</warName><webResources><resource><directory>lib/</directory><targetPath>WEB-INF/lib</targetPath><includes><include>**/*.jar</include></includes></resource></webResources></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>2.7</version><configuration><encoding>UTF-8</encoding></configuration></plugin><!-- java编译插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.2</version><configuration><source>1.7</source><target>1.7</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.4.2</version><configuration><skipTests>true</skipTests></configuration></plugin><!-- 配置Tomcat插件 --><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><port>80</port><path>/</path><!-- <url>http://192.168.25.138:8080/manager/text</url> <username>tomcat</username> <password>tomcat</password> --></configuration></plugin></plugins></build>
  • dev.properties的配置
profile.env=dev
#支付宝网关
alipay.gateway =  https://openapi.alipaydev.com/gateway.do
#支付宝appid
alipay.app.id = appid
#私钥
alipay.private.key = 私钥
#公钥
alipay.public.key =公钥
#支付宝授权登录页
alipay.url = https://openauth.alipaydev.com/oauth2/publicAppAuthorize.htm
#支付宝授权成功之后的回调地址
redirect.url = 回调地址
#我们自己网站的域名,用于重定向至错误页面
web.site = www.baidu.com
  • prod.properties的配置
profile.env=prod
#支付宝网关
alipay.gateway =  https://openapi.alipaydev.com/gateway.do
#支付宝appid
alipay.app.id = appid
#私钥
alipay.private.key = 私钥
#公钥
alipay.public.key =公钥
#支付宝授权登录页
alipay.url = https://openauth.alipaydev.com/oauth2/publicAppAuthorize.htm
#支付宝授权成功之后的回调地址
redirect.url = 回调地址
#我们自己网站的域名,用于重定向至错误页面
web.site = www.baidu.com

通过profile.env指定不同的环境
- sys-config.properties核心文件的配置(看你spring中引入的是哪个配置文件了)

env=${profile.env}
alipay.gateway=${alipay.gateway}
alipay.app.id=${alipay.app.id}
alipay.private.key=${alipay.private.key}
alipay.public.key=${alipay.public.key}
alipay.url=${alipay.url}
redirect.url=${redirect.url}
web.site=${web.site}#endpoint = http://oss-cn-qingdao.aliyuncs.com

如果没有特别的需要是不用再这里在写alipay.gateway=${alipay.gateway},我这里因为java类中用到了读配置文件的value值来生成实例,我就让java类来读这个sys-config.properties,而不去读dev.properties,所以这里用占位符的方式指定不确定的值。
- 打包时如果用的是idea(eclipse我没试)直接在右上角的位置选定你需要的环境打就可以了,比较方便。

3.补充之前知识:

我之前写过一篇【spring.xm中配置文件使用占位符】,再次贴出来,可以结合着一块来看,全文如下:
在spring中,可以使用PropertyPlaceholderConfigurer引入properties的配置文件,在配置文件中定义key,value形式的键值对,之后在xml中读取${key}的值,可以灵活的配置常用参数。

1.定义.properties的配置文件

这里用一个mysql数据库连接的配置文件做测试。

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://192.168.49.127\:3306/test?useUnicode\=true&characterEncoding\=UTF-8&useSSL=true
jdbc.username=root
jdbc.password=root

2.在.xml中引入.properties配置文件

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="locations"><list><value>classpath*:jdbc.properties</value><value>/WEB-INF/mail.properties</value></list></property></bean>

注意上面一种classpath是引用src目录下的文件写法,下面一种是引入在WEB-INF下面的文件。
如果引入单个文件,还可以不用list。

<bean id="propertyConfigurerForProject1" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  <property name="order" value="1" />  <property name="ignoreUnresolvablePlaceholders" value="true" />  <property name="location">  <value>classpath:/com/catchu/me/jdbc.properties</value>  </property>
</bean>  

3.使用配置文件

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  <property name="driverClassName" value="${jdbc.driverClassName}" />  <property name="url" value="${jdbc.url}" />  <property name="username" value="${jdbc.username}" />  <property name="password" value="${jdbc.password}" />
</bean>  

使用时直接使用${}就可以了,类似于EL表达式。

Maven项目打包遇到的两个问题相关推荐

  1. IDEA MAVEN项目打包成jar包的两种简单方式

    IDEA MAVEN项目打包成jar包的两种简单方式 准备了两个打包方法 1.IEDA自带打包方法 2.用Maven插件maven-shade-plugin打包 IDEA自带打包 适用于任何打包,稍微 ...

  2. 使用idea打包war包和maven项目打包war包放到tomcat中运行,以及报404错误的解决

    使用idea打包war包和maven项目打包war包放到tomcat中运行,以及报404错误的解决 在tomcat下运行打包的war包,访问时显示404 浅谈打包war包的方式 第一种: 第一步: 第 ...

  3. 记一次maven项目打包成exe文件过程

    记一次maven项目打包成exe文件过程 步骤 (网上很多) 将java代码在idea中打包成可执行的Jar包 通过exe4j软件打包成exe文件 问题 打包成jar包要么选择IDEA自身打包要么用m ...

  4. maven 打包时缺少文件_解决Intellij Idea下使用Maven项目打包时部分文件缺失问题

    问题 Idea被越来越多的java开发者青睐,特别是丰富的插件极大方便了开发者.Idea虽然没有Eclipse的繁琐配置,但也会出现一些问题.问题如下: 一.在进行Maven项目打包的时候,会发现有的 ...

  5. Java Maven项目打包成可执行jar文件

    在pom文件中添加一下内容 <build><plugins><plugin><!-- Build an executable JAR --><gr ...

  6. IDEA MAVEN 项目 打包文件到指定目录

    像上一篇文章,我们提到的,IDEA MAVEN struts项目中,如果我们把 struts.xml 文件放在 src 目录下,编译的时候,将无法打包到 *\WEB-INF\classes* 路径下, ...

  7. Maven项目打包成Docker镜像并启用

    SpringBoot项目打包成Docker镜像 1.将Maven项目打包成一个jar包. (先clean,再package) 2.创建一个docker文件夹,以及Dockerfile文件 mkdir ...

  8. java maven 打包jar_maven项目如何打jar包?eclipse将maven项目打包成jar包方法

    下面的内容是要给大家介绍eclipse将maven项目打包成jar包的方法,一起来看看整个过程是怎样的吧,希望对你的编程之路可以有所帮助哦. 利用eclipse把项目打包成jar,放入服务器执行. 1 ...

  9. Maven项目打包后使用cmd命令运行

    Maven项目打包我们使用的是在pom.xml中插件的配置,然后再Idea中打包成jar包 在Pom.xml中添加插件配置 项目打包插件 <build><plugins>< ...

最新文章

  1. Xcode代码不提示或提示慢
  2. Use After Free Tutorial
  3. 批处理 操作mysql_超简单使用批处理(batch)操作数据库
  4. Sketchup Pro(草图大师) 2017中文版 64位
  5. ubuntu16.04下编译安装OpenCV
  6. 不同编程语言能耗不同?看这27种语言对比!
  7. 分享一个SQL文件的合并的小程序
  8. JavaScript服务器端开发(函数实参对象arguments使用的几个注意事项)
  9. 图书馆用文本文件booklist.txt记录图书的书目,其中包括book1,book2,.....,book10.现在又要采购一批新书,编写程序将新的书目添加到目录中。
  10. [转载]用SQL语句添加删除修改字段
  11. python异步回调函数的实现
  12. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_7_Stream流中的常用方法_limit...
  13. 黑裙安装linux环境,黑群晖菜鸟安装教程(一)制作U盘引导及软洗白!
  14. foobar2000 – ELPlaylist
  15. linux 下载命令
  16. [转]一个中高级PHP工程师所应该具备的能力
  17. 我的未来作文计算机行业,我的未来职业作文4篇
  18. java web 小学期实训小节
  19. Error: Rule can only have one resource source (provided resource and test + include + exclude) in {.
  20. 计算机BIOS密码清除方法4种!

热门文章

  1. Tensorflow2.0学习笔记(二)
  2. 八大排序算法 —— 归并排序
  3. 那些年跳过的坑--编码格式(记事本 + WinSCP + MyEclipse)
  4. centos 配置IP ens33
  5. CentOS7 linux ifconfig 没有ens33网卡 连不上网
  6. 诺宝机器人制作过程_深圳诺宝机器人教案
  7. 电信邮箱(@189.cn):启用IMAP/SMTP权限+登录密码
  8. 梅科尔工作室-DjangoWeb 应用框架+MySQL数据库第五次培训
  9. qq邮箱服务器连接不上,无法登录
  10. ubuntu笔记本外置显卡开展深度学习(转载)