29) resources:resources 如何把pom中属性动态使用到java中
http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
http://maven.apache.org/plugins/maven-resources-plugin/index.html
http://maven.apache.org/plugins-archives/maven-resources-plugin-2.7/resources-mojo.html
效果就是改源码。
啥时候改?可以通过插件直接改,也可以通过maven phase 改
怎么改?目标文本文件中包含 ${...}
拿什么改? 四种属性
如何控制范围? 通过include exclude 进行配置
Required Parameters
| Name | Type | Since | Description |
|---|---|---|---|
| outputDirectory | File | - | The output directory into which to copy the resources. Default value is: ${project.build.outputDirectory}. |
Optional Parameters
| Name | Type | Since | Description |
|---|---|---|---|
| delimiters | List | 2.4 |
Set of delimiters for expressions to filter within the resources. These delimiters are specified in the form 'beginToken*endToken'. If no '*' is given, the delimiter is assumed to be the same for start and end. So, the default filtering delimiters might be specified as: <delimiters>
<delimiter>${*}</delimiter>
<delimiter>@</delimiter>
</delimiters>
Since the '@' delimiter is the same on both ends, we don't need to specify '@*@' (though we can). |
| encoding | String | - | The character encoding scheme to be applied when filtering resources. Default value is: ${project.build.sourceEncoding}. User property is: encoding. |
| escapeString | String | 2.3 | Expression preceded with the String won't be interpolated \${foo} will be replaced with ${foo} User property is: maven.resources.escapeString. |
| escapeWindowsPaths | boolean | 2.4 | Whether to escape backslashes and colons in windows-style paths. Default value is: true. User property is: maven.resources.escapeWindowsPaths. |
| filters | List | - | The list of extra filter properties files to be used along with System properties, project properties, and filter properties files specified in the POM build/filters section, which should be used for the filtering during the current mojo execution. Normally, these will be configured from a plugin's execution section, to provide a different set of filters for a particular execution. For instance, starting in Maven 2.2.0, you have the option of configuring executions with the id's default-resources and default-testResources to supply different configurations for the two different types of resources. By supplying extraFiltersconfigurations, you can separate which filters are used for which type of resource. |
| includeEmptyDirs | boolean | 2.3 | Copy any empty directories included in the Resources. Default value is: false. User property is: maven.resources.includeEmptyDirs. |
| mavenFilteringHints | List | 2.4 |
List of plexus components hint which implements MavenResourcesFiltering.filterResources(). They will be executed after the resources copying/filtering. |
| nonFilteredFileExtensions | List | 2.3 | Additional file extensions to not apply filtering (already defined are : jpg, jpeg, gif, bmp, png) |
| overwrite | boolean | 2.3 | Overwrite existing files even if the destination files are newer. Default value is: false. User property is: maven.resources.overwrite. |
| supportMultiLineFiltering | boolean | 2.5 | stop searching endToken at the end of line Default value is: false. User property is: maven.resources.supportMultiLineFiltering. |
| useBuildFilters | boolean | 2.4 | If false, don't use the filters specified in the build/filters section of the POM when processing resources in this mojo execution. See also: ResourcesMojo.buildFilters and ResourcesMojo.filters Default value is: true. |
| useDefaultDelimiters | boolean | 2.4 | (no description) Default value is: true. 解释一下,如果是true则可以额外使用默认的两种'@' 和 '${*}' ,如果是false 则不可以使用默认的 |
关于delimiters 如何自定义:
元素中值的格式: 开始符*结束符
如果没有星号,则认为给定的值是开始符,并且也是结束符
举例:
<delimiter>#{*}</delimiter>
<delimiter>||</delimiter>
<delimiter>{{*}}</delimiter>
奇怪的问题,执行后 ${} 没有被替换,-X 详细日志 发现 resource.delimiter=@
原因:没有指定 useDefaultDelimiters ,指定后还是 @ 不过${}可以被替换了,怪异!保险起见可以主动指定<delimiter>${*}</delimiter>
注意:如果想要使用'{{*}}' 不要配置成'{{' ,因为不对称,实际使用时是'{{someproperty}}' ,而不是'{{someproperty{{'
方式一:使用默认'@'和'${*}' ,不推荐,容易和spring 中的混淆
<plugin> <artifactId>maven-resources-plugin</artifactId> <version>2.6</version> <configuration> <encoding>utf-8</encoding> <useDefaultDelimiters>true</useDefaultDelimiters> </configuration> <executions> <execution> <phase>process-sources</phase> <goals> <goal>resources</goal> </goals> <configuration> <resources> <resource> <filtering>true</filtering> <directory>src/main/resources</directory> </resource> </resources> </configuration> </execution> </executions> </plugin>
执行 mvn process-sources
方式二(简化形式,但是要注意mvn命令发生了变化):
<build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.yml</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> <plugins> <plugin> <artifactId>maven-resources-plugin</artifactId> <configuration> <encoding>utf-8</encoding> <useDefaultDelimiters>true</useDefaultDelimiters> </configuration> </plugin> </plugins> </build>
执行 mvn resources:resources
支持 profile
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <profiles> <profile> <id>DEV</id> <properties> <changethis>aaaaaaaaaaaaaa</changethis> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>PRO</id> <properties> <changethis>bbbbbbbbbbbbb</changethis> </properties> </profile> </profiles>
目标文件 src/main/resources/bootstrap.yml
a: ${changethis}
执行 mvn resources:resources -PPRO -X
Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-25T02:41:47+08:00)
Maven home: D:\e\maven\apache-maven-3.6.0\bin\..
Java version: 1.8.0_181-1-redhat, vendor: Oracle Corporation, runtime: D:\e\Java\openjdk1.8.0_181\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
[DEBUG] Created new class realm maven.api
...
[DEBUG] Populating class realm maven.api
[INFO] Error stacktraces are turned on.
[DEBUG] Message scheme: color
[DEBUG] Message styles: debug info warning error success failure strong mojo project
[DEBUG] Reading global settings from D:\e\maven\apache-maven-3.6.0\bin\..\conf\settings.xml
[DEBUG] Reading user settings from C:\Users\witas\.m2\settings.xml
[DEBUG] Reading global toolchains from D:\e\maven\apache-maven-3.6.0\bin\..\conf\toolchains.xml
[DEBUG] Reading user toolchains from C:\Users\witas\.m2\toolchains.xml
[DEBUG] Using local repository at D:\mvnrepository
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10.0 for D:\mvnrepository
[INFO] Scanning for projects...
[DEBUG] Extension realms for project cn.zno:ztest:jar:0.0.1-SNAPSHOT: (none)
[DEBUG] Looking up lifecycle mappings for packaging jar from ClassRealm[plexus.core, parent: null]
[DEBUG] Resolving plugin prefix resources from [org.apache.maven.plugins, org.codehaus.mojo]
[DEBUG] Resolved plugin prefix resources to org.apache.maven.plugins:maven-resources-plugin from POM cn.zno:ztest:jar:0.0.1-SNAPSHOT
[DEBUG] === REACTOR BUILD PLAN ================================================
[DEBUG] Project: cn.zno:ztest:jar:0.0.1-SNAPSHOT
[DEBUG] Tasks: [resources:resources]
[DEBUG] Style: Regular
[DEBUG] =======================================================================
[INFO]
[INFO] ----------------------------< cn.zno:ztest >----------------------------
[INFO] Building ztest 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[DEBUG] Resolving plugin prefix resources from [org.apache.maven.plugins, org.codehaus.mojo]
[DEBUG] Resolved plugin prefix resources to org.apache.maven.plugins:maven-resources-plugin from POM cn.zno:ztest:jar:0.0.1-SNAPSHOT
[DEBUG] Lifecycle default -> [validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy]
[DEBUG] Lifecycle clean -> [pre-clean, clean, post-clean]
[DEBUG] Lifecycle site -> [pre-site, site, post-site, site-deploy]
[DEBUG] === PROJECT BUILD PLAN ================================================
[DEBUG] Project: cn.zno:ztest:0.0.1-SNAPSHOT
[DEBUG] Dependencies (collect): []
[DEBUG] Dependencies (resolve): []
[DEBUG] Repositories (dependencies): [nexus (http://192.168.3.57:8881/nexus/content/groups/public/, default, releases+snapshots), central (https://repo.maven.apache.org/maven2, default, releases)]
[DEBUG] Repositories (plugins) : [central (https://repo.maven.apache.org/maven2, default, releases)]
[DEBUG] -----------------------------------------------------------------------
[DEBUG] Goal: org.apache.maven.plugins:maven-resources-plugin:2.6:resources (default-cli)
[DEBUG] Style: Regular
[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?>
<configuration>
<buildFilters default-value="${project.build.filters}"/>
<encoding default-value="${project.build.sourceEncoding}">${encoding}</encoding>
<escapeString>${maven.resources.escapeString}</escapeString>
<escapeWindowsPaths default-value="true">${maven.resources.escapeWindowsPaths}</escapeWindowsPaths>
<includeEmptyDirs default-value="false">${maven.resources.includeEmptyDirs}</includeEmptyDirs>
<outputDirectory default-value="${project.build.outputDirectory}"/>
<overwrite default-value="false">${maven.resources.overwrite}</overwrite>
<project default-value="${project}"/>
<resources default-value="${project.resources}"/>
<session default-value="${session}"/>
<supportMultiLineFiltering default-value="false">${maven.resources.supportMultiLineFiltering}</supportMultiLineFiltering>
<useBuildFilters default-value="true"/>
<useDefaultDelimiters default-value="true"/>
</configuration>
[DEBUG] =======================================================================
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-cli) @ ztest ---
[DEBUG] Dependency collection stats: {ConflictMarker.analyzeTime=800996, ConflictMarker.markTime=442027, ConflictMarker.nodeCount=77, ConflictIdSorter.graphTime=504035, ConflictIdSorter.topsortTime=333938, ConflictIdSorter.conflictIdCount=26, ConflictIdSorter.conflictIdCycleCount=0, ConflictResolver.totalTime=4301939, ConflictResolver.conflictItemCount=74, DefaultDependencyCollector.collectTime=132168286, DefaultDependencyCollector.transformTime=8118047}
...
[DEBUG] -- end configuration --
[DEBUG] properties used {java.vendor=Oracle Corporation, env.SYSTEMROOT=C:\Windows, env.MOZ_PLUGIN_PATH=D:\Program Files (x86)\Foxit Software\Foxit Reader\plugins\, env.USERDOMAIN_ROAMINGPROFILE=DESKTOP-5KL2IOV, env.ORACLE_HOME=D:\e\oracle\instantclient_11_2, sun.java.launcher=SUN_STANDARD, sun.management.compiler=HotSpot 64-Bit Tiered Compilers, env.PROMPT=$P$G, env.WDIR=D:\, os.name=Windows 10, sun.boot.class.path=D:\e\Java\openjdk1.8.0_181\jre\lib\resources.jar;D:\e\Java\openjdk1.8.0_181\jre\lib\rt.jar;D:\e\Java\openjdk1.8.0_181\jre\lib\sunrsasign.jar;D:\e\Java\openjdk1.8.0_181\jre\lib\jsse.jar;D:\e\Java\openjdk1.8.0_181\jre\lib\jce.jar;D:\e\Java\openjdk1.8.0_181\jre\lib\charsets.jar;D:\e\Java\openjdk1.8.0_181\jre\lib\jfr.jar;D:\e\Java\openjdk1.8.0_181\jre\classes, env.COMPUTERNAME=DESKTOP-5KL2IOV, env.ECLIPSE_WORKSPACE=D:\workspaces\trawe\withhold_2, env.ALLUSERSPROFILE=C:\ProgramData, sun.desktop=windows, java.vm.specification.vendor=Oracle Corporation, java.runtime.version=1.8.0_181-1-redhat-b13, env.HOMEPATH=\Users\witas, project.build.sourceEncoding=UTF-8, user.name=witas, maven.build.version=Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-25T02:41:47+08:00), env.DRIVERDATA=C:\Windows\System32\Drivers\DriverData, env.PATH=D:/e/Java/openjdk1.8.0_181/bin/../jre/bin/server;D:/e/Java/openjdk1.8.0_181/bin/../jre/bin;D:/e/Java/openjdk1.8.0_181/bin/../jre/lib/amd64;C:\Program Files (x86)\Windows Resource Kits\Tools\;D:\Program Files (x86)\NetSarang\Xftp 6\;D:\Program Files (x86)\NetSarang\Xshell 6\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\iCLS\;C:\Program Files\Intel\Intel(R) Management Engine Components\iCLS\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;D:\Program Files\TortoiseGit\bin;D:\Program Files\TortoiseSVN\bin;D:\Program Files\Git\cmd;C:\Program Files\OpenVPN\bin;C:\Users\witas\AppData\Local\Microsoft\WindowsApps;D:\e\Java\openjdk1.8.0_181\bin;D:\e\maven\apache-maven-3.6.0\bin;D:\e\tomcat\apache-tomcat-8.0.28\bin;;D:\e\eclipse\sts-4.1.0.RELEASE;, user.language=zh, env.JVMCONFIG=\.mvn\jvm.config, env.WINDIR=C:\Windows, sun.boot.library.path=D:\e\Java\openjdk1.8.0_181\jre\bin, classworlds.conf=D:\e\maven\apache-maven-3.6.0\bin\..\bin\m2.conf, java.version=1.8.0_181-1-redhat, env.PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 142 Stepping 10, GenuineIntel, user.timezone=, env.TEMP=C:\Users\witas\AppData\Local\Temp, sun.arch.data.model=64, env.EXEC_DIR=D:\workspaces\trawe\withhold_2\ztest, java.endorsed.dirs=D:\e\Java\openjdk1.8.0_181\jre\lib\endorsed, sun.cpu.isalist=amd64, env.HOMEDRIVE=C:, sun.jnu.encoding=GBK, file.encoding.pkg=sun.io, env.SYSTEMDRIVE=C:, env.NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK, file.separator=\, java.specification.name=Java Platform API Specification, maven.conf=D:\e\maven\apache-maven-3.6.0\bin\../conf, env.JAVACMD=D:\e\Java\openjdk1.8.0_181\bin\java.exe, java.class.version=52.0, user.country=CN, java.home=D:\e\Java\openjdk1.8.0_181\jre, env.APPDATA=C:\Users\witas\AppData\Roaming, env.PUBLIC=C:\Users\Public, java.vm.info=mixed mode, env.CATALINA_HOME=D:\e\tomcat\apache-tomcat-8.0.28, env.OS=Windows_NT, os.version=10.0, path.separator=;, java.vm.version=25.181-b13, user.variant=, env.USERPROFILE=C:\Users\witas, env.JAVA_HOME=D:\e\Java\openjdk1.8.0_181, java.awt.printerjob=sun.awt.windows.WPrinterJob, env.TERM=xterm, env.TMP=C:\Users\witas\AppData\Local\Temp, env.FPS_BROWSER_USER_PROFILE_STRING=Default, env.PROGRAMFILES=C:\Program Files, sun.io.unicode.encoding=UnicodeLittle, awt.toolkit=sun.awt.windows.WToolkit, user.script=, user.home=C:\Users\witas, env.COMMONPROGRAMFILES=C:\Program Files\Common Files, env.=EXITCODE=00000000, env.SESSIONNAME=Console, java.specification.vendor=Oracle Corporation, env.TNS_ADMIN=D:\e\oracle\tnsnames, library.jansi.path=D:\e\maven\apache-maven-3.6.0\bin\..\lib\jansi-native, java.library.path=D:\e\Java\openjdk1.8.0_181\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;D:/e/Java/openjdk1.8.0_181/bin/../jre/bin/server;D:/e/Java/openjdk1.8.0_181/bin/../jre/bin;D:/e/Java/openjdk1.8.0_181/bin/../jre/lib/amd64;C:\Program Files (x86)\Windows Resource Kits\Tools\;D:\Program Files (x86)\NetSarang\Xftp 6\;D:\Program Files (x86)\NetSarang\Xshell 6\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\iCLS\;C:\Program Files\Intel\Intel(R) Management Engine Components\iCLS\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;D:\Program Files\TortoiseGit\bin;D:\Program Files\TortoiseSVN\bin;D:\Program Files\Git\cmd;C:\Program Files\OpenVPN\bin;C:\Users\witas\AppData\Local\Microsoft\WindowsApps;D:\e\Java\openjdk1.8.0_181\bin;D:\e\maven\apache-maven-3.6.0\bin;D:\e\tomcat\apache-tomcat-8.0.28\bin;;D:\e\eclipse\sts-4.1.0.RELEASE;;., env.NUMBER_OF_PROCESSORS=8, java.vendor.url=http://java.oracle.com/, env.COMMONPROGRAMFILES(X86)=C:\Program Files (x86)\Common Files, env.PSMODULEPATH=C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules, env.CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher, env.MAVEN_CMD_LINE_ARGS=resources:resources -PPRO -X, java.vm.vendor=Oracle Corporation, maven.home=D:\e\maven\apache-maven-3.6.0\bin\.., java.runtime.name=OpenJDK Runtime Environment, sun.java.command=org.codehaus.plexus.classworlds.launcher.Launcher resources:resources -PPRO -X, java.class.path=D:\e\maven\apache-maven-3.6.0\bin\..\boot\plexus-classworlds-2.5.2.jar, env.PROGRAMW6432=C:\Program Files, maven.version=3.6.0, env.PROGRAMFILES(X86)=C:\Program Files (x86), java.vm.specification.name=Java Virtual Machine Specification, env.LOGONSERVER=\\DESKTOP-5KL2IOV, java.vm.specification.version=1.8, env.PROCESSOR_ARCHITECTURE=AMD64, env.COMMONPROGRAMW6432=C:\Program Files\Common Files, sun.cpu.endian=little, sun.os.patch.level=, java.io.tmpdir=C:\Users\witas\AppData\Local\Temp\, env.PROCESSOR_REVISION=8e0a, java.vendor.url.bug=http://bugreport.sun.com/bugreport/, maven.multiModuleProjectDirectory=D:\workspaces\trawe\withhold_2\ztest, env.PROGRAMDATA=C:\ProgramData, env.ECLIPSE_HOME=D:\e\eclipse\sts-4.1.0.RELEASE, env.COMSPEC=C:\Windows\system32\cmd.exe, env.FPS_BROWSER_APP_PROFILE_STRING=Internet Explorer, os.arch=amd64, java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment, java.ext.dirs=D:\e\Java\openjdk1.8.0_181\jre\lib\ext;C:\Windows\Sun\Java\lib\ext, env.=D:=D:\workspaces\trawe\withhold_2\ztest, user.dir=D:\workspaces\trawe\withhold_2\ztest, env.MAVEN_HOME=D:\e\maven\apache-maven-3.6.0\bin\.., env.LOCALAPPDATA=C:\Users\witas\AppData\Local, changethis=bbbbbbbbbbbbb, line.separator=
, env.CLASSWORLDS_JAR="D:\e\maven\apache-maven-3.6.0\bin\..\boot\plexus-classworlds-2.5.2.jar", java.vm.name=OpenJDK 64-Bit Server VM, env.PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC, env.ERROR_CODE=0, env.USERNAME=witas, sun.stderr.encoding=ms936, file.encoding=GBK, env.USERDOMAIN=DESKTOP-5KL2IOV, java.specification.version=1.8, env.PROCESSOR_LEVEL=6, env.MAVEN_PROJECTBASEDIR=D:\workspaces\trawe\withhold_2\ztest}
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[DEBUG] resource with targetPath null
directory D:\workspaces\trawe\withhold_2\ztest\src\main\resources
excludes []
includes []
[DEBUG] ignoreDelta true
[INFO] Copying 1 resource
[DEBUG] file bootstrap.yml has a filtered file extension
[DEBUG] filtering D:\workspaces\trawe\withhold_2\ztest\src\main\resources\bootstrap.yml to D:\workspaces\trawe\withhold_2\ztest\target\classes\bootstrap.yml
[DEBUG] no use filter components
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.446 s
[INFO] Finished at: 2019-09-04T17:47:54+08:00
[INFO] ------------------------------------------------------------------------
target\classes\bootstrap.yml 内容:
a: bbbbbbbbbbbbb
实际应用
浙公网安备 33010602011771号