第 2 章 使用规则入门
您可以通过创建规则或查看快速入门来开始创建自定义 MTR 规则。
2.1. 创建第一个 XML 规则
本小节介绍了创建和测试第一个基于 MTR XML 的规则的过程。这假设您已安装了 MTR。有关安装说明,请参阅 CLI 指南中的安装和运行 CLI。
在本例中,您将编写一个规则来发现应用程序定义了包含 <class-loading>
元素的 jboss-web.xml
文件,并提供描述如何迁移代码的文档的链接。
为规则创建目录结构
创建目录结构以包含您的第一条规则和用于测试的数据文件。
$ mkdir -p /home/<USER_NAME>/migration-rules/rules $ mkdir -p /home/<USER_NAME>/migration-rules/data
此目录结构也将用于存放生成的 MTR 报告。
创建数据来测试规则
-
在
/home/<USER_NAME>/migration-rules/data/
子目录中创建一个jbossweb.xml
文件。 复制以下内容。
<!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 4.2//EN" "http://www.jboss.org/j2ee/dtd/jboss-web_4_2.dtd"> <jboss-web> <class-loading java2ClassLoadingCompliance="false"> <loader-repository> seam.jboss.org:loader=@projectName@ <loader-repository-config>java2ParentDelegation=false</loader-repository-config> </loader-repository> </class-loading> </jboss-web>
创建规则
MTR 基于 XML 的规则使用以下规则模式:
when(condition) perform(action) otherwise(action)
流程
在
/home/<USER_NAME>/migration-rules/rules/
目录中,创建一个名为JBoss5-web-class-loading.windup.xml
的文件,其中包含以下内容:<?xml version="1.0"?> <ruleset id="<UNIQUE_RULESET_ID>" xmlns="http://windup.jboss.org/schema/jboss-ruleset" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://windup.jboss.org/schema/jboss-ruleset http://windup.jboss.org/schema/jboss-ruleset/windup-jboss-ruleset.xsd"> <metadata> <description> <!-- Ruleset Description --> </description> <dependencies> <!-- Ruleset Dependencies --> </dependencies> <sourceTechnology id="<SOURCE_ID>" versionRange="<SOURCE_VERSION_RANGE>"/> <targetTechnology id="<TARGET_ID>" versionRange="<TARGET_VERSION_RANGE>"/> <tag>Reviewed-2015-05-01</tag> </metadata> <rules> <rule id="<UNIQUE_RULE_ID>"> <when> <!-- Test for a condition here --> </when> <perform> <!-- Perform an action --> </perform> </rule> </rules> </ruleset>
注意XML 文件名必须包含
.windup.xml
扩展。否则,MTR 不会评估新规则。为 ruleset 和 rule 添加唯一标识符:
-
将
<UNIQUE_RULESET_ID>
替换为适当的规则集 ID,如JBoss5-web-class-loading
。 -
将
<UNIQUE_RULE_ID>
替换为适当的规则 ID,例如JBoss5-web-class-loading_001
。
-
将
添加以下 ruleset 附加组件依赖项:
<dependencies> <addon id="org.jboss.windup.rules,windup-rules-javaee,3.0.0.Final"/> <addon id="org.jboss.windup.rules,windup-rules-java,3.0.0.Final"/> </dependencies>
添加源和目标技术:
-
将
<SOURCE_ID>
替换为eap
。 -
将
<TARGET_ID>
替换为eap
。
-
将
设置源和目标技术版本。
-
将
<SOURCE_VERSION_RANGE>
替换为(4,5)
。 -
将
<TARGET_VERSION_RANGE>
替换为(6,)
。
如需更多信息,请参阅 Apache Maven 版本范围规格。
-
将
完成
when
条件。由于此规则测试在 XML 文件中的一个匹配项,因此xmlfile
被用于评估文件。要在作为
jboss-web
的子class-loading
项上匹配,请使用 xpath 表达式jboss-web/class-loading
。<when> <xmlfile matches="jboss-web/class-loading" /> </when>
为这个规则完成
perform
操作。-
添加带有描述性标题的分类,以及
1
的工作量级别。 提供提示以及描述迁移详情的文档的链接。
<perform> <iteration> <classification title="JBoss Web Application Descriptor" effort="1"/> <hint title="JBoss Web XML class-loading element is no longer valid"> <message> The class-loading element is no longer valid in the jboss-web.xml file. </message> <link href="https://access.redhat.com/documentation/zh-CN/JBoss_Enterprise_Application_Platform/6.4/html-single/Migration_Guide/index.html#Create_or_Modify_Files_That_Control_Class_Loading_in_JBoss_Enterprise_Application_Platform_6" title="Create or Modify Files That Control Class Loading in JBoss EAP 6"/> </hint> </iteration> </perform>
-
添加带有描述性标题的分类,以及
该规则现已完成,应类似以下示例。
<?xml version="1.0"?> <ruleset id="JBoss5-web-class-loading" xmlns="http://windup.jboss.org/schema/jboss-ruleset" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://windup.jboss.org/schema/jboss-ruleset http://windup.jboss.org/schema/jboss-ruleset/windup-jboss-ruleset.xsd"> <metadata> <description> This ruleset looks for the class-loading element in a jboss-web.xml file, which is no longer valid in JBoss EAP 6 </description> <dependencies> <addon id="org.jboss.windup.rules,windup-rules-javaee,3.0.0.Final"/> <addon id="org.jboss.windup.rules,windup-rules-java,3.0.0.Final"/> </dependencies> <sourceTechnology id="eap" versionRange="(4,5)"/> <targetTechnology id="eap" versionRange="[6,)"/> </metadata> <rules> <rule id="JBoss5-web-class-loading_001"> <when> <xmlfile matches="jboss-web/class-loading" /> </when> <perform> <iteration> <classification title="JBoss Web Application Descriptor" effort="1"/> <hint title="JBoss Web XML class-loading element is no longer valid"> <message> The class-loading element is no longer valid in the jboss-web.xml file. </message> <link href="https://access.redhat.com/documentation/zh-CN/JBoss_Enterprise_Application_Platform/6.4/html-single/Migration_Guide/index.html#Create_or_Modify_Files_That_Control_Class_Loading_in_JBoss_Enterprise_Application_Platform_6" title="Create or modify files that control class loading in JBoss EAP 6"/> </hint> </iteration> </perform> </rule> </rules> </ruleset>
安装规则
通过将规则放在适当的目录中,会安装 MTR 规则。
将 JBoss5-web-class-loading.windup.xml
复制到 <MTR_HOME>/rules/
目录。
$ cp /home/<USER_NAME>/migration-rules/rules/JBoss5-web-class-loading.windup.xml <MTR_HOME>/rules/
测试规则
打开一个终端,再运行以下命令,将测试文件作为输入参数和输出报告的目录传递。
$ <MTR_HOME>/bin/windup-cli --sourceMode --input /home/<USER_NAME>/migration-rules/data --output /home/<USER_NAME>/migration-rules/reports --target eap:6
您应看到以下结果:
Report created: /home/<USER_NAME>/migration-rules/reports/index.html Access it at this URL: file:///home/<USER_NAME>/migration-rules/reports/index.html
查看报告
查看报告以确保它提供了预期的结果。有关 MTR 报告的详细指导,请参阅 MTR CLI 指南中的审阅报告部分。
-
在一个 web 浏览器打开
/home/<USER_NAME>/migration-rules/reports/index.html
。 验证规则是否已成功运行。
- 在主登录页面中,点 Rule providers execution overview 链接,以打开 Rule Providers Execution Overview。
找到
JBoss5-web-class-loading_001
规则,验证它的 Status? 是Condition met
,它的 Result? 是success
。图 2.1. 测试规则执行
验证规则是否与测试数据匹配:
-
在主登录页面中,点应用程序或输入文件夹的名称,本例中为
data
。 - 点 Application Details 报告链接。
点 jboss-web.xml 链接,以查看 Source 报告。
您可以看到
<class-loading>
行已被突出显示,自定义规则中的 hint 会显示内联。图 2.2. 规则匹配
文件顶部列出了匹配规则的分类。您可以使用链接图标查看该规则的详情。请注意在本示例中,
jboss-web.xml
文件匹配另外一个规则 (JBoss web application descriptor (jboss-web.xml)
) ,它生成的故事点为1
。此故事点和来自自定义规则的1
个故事点将此文件的总故事点设置为2
。
-
在主登录页面中,点应用程序或输入文件夹的名称,本例中为