maven filter简介

  本人在最近使用maven时遇到了一个问题,现将解决问题的过程以及maven filter的技巧做简单介绍,希望大家可以多多指正。

问题:使用Mybatis的动态sql进行查找时,无论如何查找结果都为空,查找sql如下所示:

<if test=”name != null and name != ””\>
   and name like CONCAT(‘%’,’${name}’,’%’ )
</if>

查找过程:通过打开sql日志,发现输出的sql中name变量被替换为莫名其妙的文字,打开target/classes/module.report目录下的资源文件,发现在maven打包后的mapper文件中,name已被替换

<if test=”name != null and name != ””>
   and name like CONCAT(‘%’,’ipharmacare-distributed-system’,’%’ )
</if>

结果:查找原因是因为在pom文件中开启了maven filter,而filter plugin会在打包时进行变量替换,具体替换的变量被${}标识,变量可以来自系统变量、应用属性以及命令行输入。

<resource>
 <directory> src/main/resources </directory>
 <filtering> true </filtering>
 …
</resource>

最后将<filtering>设置为false后问题得以解决。

现将maven filter总结如下
1、maven在打包时会copy资源文件,默认情况下mvn会寻找src/main/resources目录,但是有时我们的资源文件可能
并不在该目录下,所以我们可以通过<resources>标签指定maven资源文件的路径,如下所示:

<project>
 <build>
  <resources>
   <resource>
    <directory> [your folder here] </directory>
   </resource>
  </resources>
 </build>
</project>

同样,我们可以显示的通过<includes>,<excludes>标签显示的指定资源文件目录下的哪些文件需要被copy,哪些不需要,具体
语法如下所示:

<resources>
 <resource>
  <directory> [your directory] </directory>
  <includes>
   <include>**/*.xml</include>
   <include> [resource file #n] </include>
  </includes>
  <excludes>
   <exclude>**/*.jpg</exclude>
   <exclude> [non-resource file #n] </exclude>
  </excludes>
 </resource>
</resources>

*注意:匹配符**(可以匹配路径,包含mapper/report/report.xml),*不能包含路径(test.jpg)

2、在我们的资源文件中很可能包含变量,通过${}标识,maven filter plugin可以帮助我们在打包时对变量进行值替换。
例如:我们有资源文件src/main/resources/hello.txt,包含内容如下:

Hello ${name}

pom.xml文件内容如下

<project>
 <name>My Resources Plugin Practice Project</name>
 <build>
  <resources>
   <resource>
    <directory> src/main/resources </directory>
   </resource>
  </resources>
 </build>
</project>

运行maven 打包:

mvn resources:resources

打包后的资源文件输出到路径target/classes/hello.txt,内容如下:

Hello ${name}

注意此时的name变量没有替换,但是如果我们将<filtering>开关打开,

<resource>
 <directory>src/main/resources</directory>
 <filtering> true </filtering>
</resource>

同样的运行命令打包,此时的资源文件输出为:

Hello My Resources Plugin Practice Project

我们可以看到maven进行了变量的替换,同样的变量可以来自命令行输入,执行如下命令:

mvn resources:resources -Dname=”world”

打包后的输出为:

Hello world

ibatis小知识点:
1、ibatis中变量标识 # vs $ 的区别

1) #是把传入的数据当作字符串,如#field#传入的是id,则sql语句生成是这样,order by “id”,这样会报错..
2) $传入的数据直接生成在sql里,如#field#传入的是id,则sql语句生成是这样,order by id, 这就对了.
3) #方式能够很大程度防止sql注入,$方式无法方式sql注入.
4) $方式一般用于传入数据库对象.例如传入表名.
5) 一般能用#的就别用$.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
05-31
(test_dir, '*.jpg')); % 获取所有 jpg 格式的文件 num_test = length(test_files); test_data = cell(num_test,Maven是一款开源的项目管理工具,主要用于Java项目的构建、依赖管理和项目信息 1); % 存储测试图像数据的 cell 数组 test_feats = cell(num_test, 1); % 存储测试管理。使用Maven可以方便地管理项目的依赖关系、统一构建规范、自动生成项目文档图像特征的 cell 数组 for i = 1:num_test img_name = fullfile(test_dir, test_files(i).等。 Maven的核心概念包括: 1. 项目对象模型(Project Object Model,POM):Mname); img = imread(img_name); if size(img, 3) == 3 % 如果是彩色图像,则转aven项目的描述文件,通常是pom.xml文件,用于描述项目的基本信息、依赖关系、构换为灰度图像 img = rgb2gray(img); end test_data{i} = img; test_feats建规则等。 2. 坐标(Coordinates):用于唯一标识Maven项目或依赖项的标识{i} = gaborFeatures(img, gabor_filter_bank); end % 对每个测试图像进行分类 test_labels = zeros符,包括groupId、artifactId和version三个属性。 3. 仓库(Repository):用于存储Maven(num_test, 1); for i = 1:num_test test_feat = test_feats{i}; test_label = predict(svm项目或依赖项的远程或本地仓库,通常包括中央仓库、本地仓库和私_model, test_feat); test_labels(i) = test_label; end ``` 最后得到的 `test_labels` 数组服仓库等。 4. 生命周期(Lifecycle):Maven提供了多个构建生命周期(如compile、test、package等),每个生命周期包含多个构建阶段(如compile阶段、test阶段、package阶段等即为每个测试图像的分类结果。 以上是一种可能的解决方案,具体实现可以根据自己的需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值