Maven项目打包遇到的两个问题
2017-12-07 17:40
423 查看
项目部署上线时需要打包,我们的项目是采用maven工程,打包时碰到过两个问题,做下记录:
- 我在与src并列的目录下新建一个lib的文件夹,将支付宝的alipay-sdk-java-ALL20171128134549.jar包放在这个文件夹里面。
- pom的依赖中这样写:
pom的引入插件中这样写:
这样就可以在部署时将本地jar包打入war包中了。
- pom.xml中的配置
dev.properties的配置
prod.properties的配置
通过profile.env指定不同的环境
- sys-config.properties核心文件的配置(看你spring中引入的是哪个配置文件了)
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[/code]
如果没有特别的需要是不用再这里在写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=root2.在.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 package打包webapp项目遇到的问题
- maven构建项目自动部署到tomcat中遇到的各种问题总结
- 关于eclipse的maven项目遇到的问题
- 使用webpack打包react项目中遇到的问题(一)
- 不使用IDE,用maven命令打包war项目及出现的问题解决(最全攻略,亲测有效)
- web项目中遇到的Maven包依赖冲突问题解决
- 使用Maven构建web项目遇到的一些问题
- 项目适配iOS9遇到的一些问题及解决办法(更新两个小问题)
- 把web项目改造成maven项目,maven项目启动过程中遇到问题解决
- 项目适配iOS9遇到的一些问题及解决办法(更新两个小问题)
- maven+idea 自动部署项目到linux服务器及遇到的一些问题
- 使用tomcatPlugin配合JRebel解决maven项目依赖war的打包和热部署的问题
- <整理>将项目打包成runable jar包并运行遇到的问题及解决办法记录。
- maven构建项目自动部署到tomcat中遇到的各种sb问题总结
- eclipse 开发maven项目时 遇到的问题
- 不使用IDE,用maven命令打包war项目及出现的问题解决(最全攻略,亲测有效)
- 解决用eclipse对maven-web项目进行debug时遇到 source not found问题
- 解决使用maven打包项目时,依赖jar先解压成class在打包的问题
- Intellij Idea导入非maven Web项目时遇到lib目录冲突的问题