Maven项目打包遇到的两个问题
项目部署上线时需要打包,我们的项目是采用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项目打包遇到的两个问题相关推荐
- IDEA MAVEN项目打包成jar包的两种简单方式
IDEA MAVEN项目打包成jar包的两种简单方式 准备了两个打包方法 1.IEDA自带打包方法 2.用Maven插件maven-shade-plugin打包 IDEA自带打包 适用于任何打包,稍微 ...
- 使用idea打包war包和maven项目打包war包放到tomcat中运行,以及报404错误的解决
使用idea打包war包和maven项目打包war包放到tomcat中运行,以及报404错误的解决 在tomcat下运行打包的war包,访问时显示404 浅谈打包war包的方式 第一种: 第一步: 第 ...
- 记一次maven项目打包成exe文件过程
记一次maven项目打包成exe文件过程 步骤 (网上很多) 将java代码在idea中打包成可执行的Jar包 通过exe4j软件打包成exe文件 问题 打包成jar包要么选择IDEA自身打包要么用m ...
- maven 打包时缺少文件_解决Intellij Idea下使用Maven项目打包时部分文件缺失问题
问题 Idea被越来越多的java开发者青睐,特别是丰富的插件极大方便了开发者.Idea虽然没有Eclipse的繁琐配置,但也会出现一些问题.问题如下: 一.在进行Maven项目打包的时候,会发现有的 ...
- Java Maven项目打包成可执行jar文件
在pom文件中添加一下内容 <build><plugins><plugin><!-- Build an executable JAR --><gr ...
- IDEA MAVEN 项目 打包文件到指定目录
像上一篇文章,我们提到的,IDEA MAVEN struts项目中,如果我们把 struts.xml 文件放在 src 目录下,编译的时候,将无法打包到 *\WEB-INF\classes* 路径下, ...
- Maven项目打包成Docker镜像并启用
SpringBoot项目打包成Docker镜像 1.将Maven项目打包成一个jar包. (先clean,再package) 2.创建一个docker文件夹,以及Dockerfile文件 mkdir ...
- java maven 打包jar_maven项目如何打jar包?eclipse将maven项目打包成jar包方法
下面的内容是要给大家介绍eclipse将maven项目打包成jar包的方法,一起来看看整个过程是怎样的吧,希望对你的编程之路可以有所帮助哦. 利用eclipse把项目打包成jar,放入服务器执行. 1 ...
- Maven项目打包后使用cmd命令运行
Maven项目打包我们使用的是在pom.xml中插件的配置,然后再Idea中打包成jar包 在Pom.xml中添加插件配置 项目打包插件 <build><plugins>< ...
最新文章
- Xcode代码不提示或提示慢
- Use After Free Tutorial
- 批处理 操作mysql_超简单使用批处理(batch)操作数据库
- Sketchup Pro(草图大师) 2017中文版 64位
- ubuntu16.04下编译安装OpenCV
- 不同编程语言能耗不同?看这27种语言对比!
- 分享一个SQL文件的合并的小程序
- JavaScript服务器端开发(函数实参对象arguments使用的几个注意事项)
- 图书馆用文本文件booklist.txt记录图书的书目,其中包括book1,book2,.....,book10.现在又要采购一批新书,编写程序将新的书目添加到目录中。
- [转载]用SQL语句添加删除修改字段
- python异步回调函数的实现
- 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_7_Stream流中的常用方法_limit...
- 黑裙安装linux环境,黑群晖菜鸟安装教程(一)制作U盘引导及软洗白!
- foobar2000 – ELPlaylist
- linux 下载命令
- [转]一个中高级PHP工程师所应该具备的能力
- 我的未来作文计算机行业,我的未来职业作文4篇
- java web 小学期实训小节
- Error: Rule can only have one resource source (provided resource and test + include + exclude) in {.
- 计算机BIOS密码清除方法4种!
热门文章
- Tensorflow2.0学习笔记(二)
- 八大排序算法 —— 归并排序
- 那些年跳过的坑--编码格式(记事本 + WinSCP + MyEclipse)
- centos 配置IP ens33
- CentOS7 linux ifconfig 没有ens33网卡 连不上网
- 诺宝机器人制作过程_深圳诺宝机器人教案
- 电信邮箱(@189.cn):启用IMAP/SMTP权限+登录密码
- 梅科尔工作室-DjangoWeb 应用框架+MySQL数据库第五次培训
- qq邮箱服务器连接不上,无法登录
- ubuntu笔记本外置显卡开展深度学习(转载)