maven打包额外的资源⽂件
在⽤Maven打包的时候发现,有⼀些资源⽂件打包不到jar包中,于是了解了⼀下Maven的打包配置,最后得到了解决问题的办法。
Maven资源⽂件的默认约定
构建Maven项⽬的时候,如果没有进⾏特殊的配置,Maven会按照标准的⽬录结构,去查和处理各种类型的⽂件,这就是Maven遵循的约定优于配置原则。Maven项⽬的标准⽬录结构
src
— — main
— — java 源⽂件
— — — — resources 资源⽂件
— — — — filters 资源过滤⽂件
— — — — config 配置⽂件
— — — — scripts 脚本⽂件
— — — — webapp web应⽤⽂件
— — test
— — — — java 测试源⽂件
— — — — resources 测试资源⽂件
— — — — filters 测试资源过滤⽂件
— — it 集成测试
— — assembly assembly descriptors
— — site Site
target
— — generated-sources
—
— classes
— — generated-test-sources
— — test-classes
— — xxx.jar
<
<
<maven打包本地jar包
src/main/java和src/test/java
这两个⽬录中的所有*.java⽂件会分别在compile和test-compile阶段被编译,编译的结果会被分别放到target/classes和target/test-classes⽬录中,但是这两个⽬录中的其他⾮*.java的⽂件都会被忽略掉。
src/main/resouces和src/test/resources
这两个⽬录中的⽂件也是会被分别复制到target/classes和target/test-classes⽬录中。
target/clasess
打包插件默认会把这个⽬录中的所有内容打⼊到jar包或者war包中。
Maven打额外资源⽂件的配置
资源⽂件是Java代码中要使⽤的⽂件,代码在执⾏的时候会到指定⽬录去查这些⽂件。⼀般情况下,我们⽤到的资源⽂件(各种xml,properties,xsd⽂件等)都放在src/mian/resources下,利⽤Maven打包的时候,Maven都能默认将这些资源⽂件打包到相应的jar包或者war包中。
但是有些时候,可能会把资源⽂件放到src/main/java下,⽐如说Mybatis的l⽂件就是和Mapper.java放在⼀起,也就导致了java⽂件能打到jar包中,l却没有打进jar包中。这时候,就需要在l中添加特定的配置来将这些资源⽂件能打进jar包或war包中。
配置有两种⽅法,⼀是在<build>标签节点下添加<resources>标签节点,⼆是在<build>标签节点下的<plugins>标签节点中配置maven-resources-plugin等处理资源⽂件的插件。
<resources>标签
<build>
.......
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.properties</exclude>
<exclude>**/*.xml</exclude>
</excludes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
......
</build>
maven-resources-plugin插件
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<executions>
<execution>
<id>copy-xmls</id>
<phase>process-sources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/classes</outputDirectory>
<resources>
<resource>
<directory>${basedir}/src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
build-helper-maven-plugin插件
<plugin>
<groupId&jo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>add-resource</id>
<phase>generate-resources</phase>
<goals>
<goal>add-resource</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
Maven排除资源⽂件的配置
前⾯说了,target/classes⽬录中的资源⽂件会全部和class字节码⼀起被打进jar包或war包中。这样,当你希望有⼀些⽂件不被打包的时候,就需要额外去配置maven-jar-plugin插件了。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<excludes>
<exclude>*.properties</exclude>
</excludes>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.yanggb.main.HelloWorld</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
"可是怎么办好呢,看到你难过的时候我还是会⼼疼。"
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论