龙空技术网

Maven项目打包遇到的两个问题

顶呱呱啊顶呱呱 977

前言:

而今兄弟们对“maven本地jar打包进lib里面不可用”大体比较讲究,朋友们都想要分析一些“maven本地jar打包进lib里面不可用”的相关资讯。那么小编同时在网上搜集了一些关于“maven本地jar打包进lib里面不可用””的相关知识,希望咱们能喜欢,姐妹们快快来学习一下吧!

项目部署上线时需要打包,我们的项目是采用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>;/url> <username>tomcat</username> <password>tomcat</password> --> </configuration> </plugin> </plugins> </build>

dev.properties的配置

profile.env=dev#支付宝网关alipay.gateway = 支付宝appidalipay.app.id = appid#私钥alipay.private.key = 私钥#公钥alipay.public.key =公钥#支付宝授权登录页alipay.url = 支付宝授权成功之后的回调地址redirect.url = 回调地址#我们自己网站的域名,用于重定向至错误页面web.site = 

prod.properties的配置

profile.env=prod#支付宝网关alipay.gateway = 支付宝appidalipay.app.id = appid#私钥alipay.private.key = 私钥#公钥alipay.public.key =公钥#支付宝授权登录页alipay.url = 支付宝授权成功之后的回调地址redirect.url = 回调地址#我们自己网站的域名,用于重定向至错误页面web.site = 

通过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 = 

如果没有特别的需要是不用再这里在写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.Driverjdbc.url=jdbc\:mysql\://192.168.49.127\:3306/test?useUnicode\=true&characterEncoding\=UTF-8&useSSL=truejdbc.username=rootjdbc.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本地jar打包进lib里面不可用