2.3. 创建基本 YAML 规则
本节论述了如何创建基本 MTA YAML 规则。假设您已安装了 MTA。有关安装说明,请参阅 MTA CLI 指南。
2.3.1. 创建基本 YAML 规则模板 复制链接链接已复制到粘贴板!
基于 MTA YAML 的规则有以下基本结构:
when(condition) message(message) tag(tags)
when(condition)
message(message)
tag(tags)
流程
在
/home/<USER&
gt;/ 目录中,创建一个文件,其中包含 YAML 规则的基本语法,如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.2. 规则类别 复制链接链接已复制到粘贴板!
-
必需
:您必须解决这个问题才能成功进行迁移。如果不进行更改,则生成的应用不会成功构建或运行。示例包括替换目标平台不支持的专有 API。 -
可选
:如果您不解决这个问题,应用程序应该可以正常工作,但结果可能不是最佳状态。如果您没有在迁移时进行更改,建议在迁移完成后马上将其包含在计划中。 -
潜在的
:您需要在迁移过程中检查问题,但没有足够的详细信息来确定任务是否强制迁移成功。例如,当目标平台上没有直接兼容类型时,迁移第三方专有类型。
2.3.3. 规则操作 复制链接链接已复制到粘贴板!
规则可包括以下类型的操作:
- message
- tag
每个规则包括其中一个或两个。
消息操作
当消息操作与规则匹配时,它会创建一个问题。供应商导出的自定义数据可以在消息中使用。
- ruleID: test-rule when: <CONDITION> message: Test rule matched. Please resolve this migration issue.
- ruleID: test-rule
when:
<CONDITION>
message: Test rule matched. Please resolve this migration issue.
(可选)消息可以包含超链接到外部 URL,它们提供有关问题或快速修复相关信息。
links: - url: "konveyor.io" title: "Short title for the link"
links:
- url: "konveyor.io"
title: "Short title for the link"
消息也可以是模板,其中包含有关通过规则上的自定义变量插入的匹配项的信息。
2.3.4. 规则条件 复制链接链接已复制到粘贴板!
每个规则都有 when
block,它指定了对 MTA 执行某个操作需要满足的条件。
when
块包含一个条件,但该条件可以在它下嵌套多个条件。
when: <condition> <nested-condition>
when:
<condition>
<nested-condition>
MTA 支持以下类型条件:
-
provider
-
and
-
或者
2.3.5. 标签操作 复制链接链接已复制到粘贴板!
tag 操作指示分析器在找到匹配项时为应用程序生成一个或多个标签。tag
字段中的每一字符串可以是以逗号分隔的标签列表。另外,您可以为标签分配类别。
tag: - "tag1,tag2,tag3" - "Category=tag4,tag5"
tag:
- "tag1,tag2,tag3"
- "Category=tag4,tag5"
Example
标签可以是字符串或 key=val
对,其中密钥被视为 MTA 中的标签类别。具有标签操作的任何规则都被称为本文档中的"标记规则"。
没有为仅包含标签操作的规则创建问题。
2.3.6. 消息操作 复制链接链接已复制到粘贴板!
当规则匹配时,使用消息操作来生成指定消息的问题,例如:
# When a match is found, the analyzer generates incidents with the same message. message: "helpful message about the violation"
# When a match is found, the analyzer generates incidents with the same message.
message: "helpful message about the violation"
您还可以创建一个模板消息,使其包含通过规则上的自定义变量插入的匹配项的信息。
2.3.7. hyperlinks 复制链接链接已复制到粘贴板!
超链接可以和 消息
或标签
操作一起提供,以提供与问题相关的信息,已发现:
2.3.8. 供应商条件 复制链接链接已复制到粘贴板!
分析器引擎可使用 提供程序 启用多语言源代码分析。技术的源代码由供应商分析。
供应商发布在功能方面可以使用源代码的功能。
供应商条件指示分析器使用特定的提供程序及其其中一个功能。通常,它遵循 < provider_name>.<capability>
模式。
when: <provider_name>.<capability> <input_fields>
when:
<provider_name>.<capability>
<input_fields>
分析器目前支持以下供应商 条件
:
-
builtin
-
java
-
go
-
dotnet
在 CLI 上分析多个应用程序时,支持提供单个报告只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
供应商规则条件 | 供应商名称 |
---|---|
完全支持并包含在产品中的供应商 | Java |
在产品中已定义了规则的供应商 | .NET |
需要自定义规则集进行分析的供应商 |
|
根据提供程序,条件的字段,如上例中的模式和位置更改。
有些提供程序具有 dependency_ 功能。dependency_capability 表示该提供程序为给定应用程序生成依赖项列表。
您可以使用 dependency_condition 查询此列表,并检查应用程序是否存在带有版本范围的特定依赖项。
例如,要检查 Java 应用程序是否有特定依赖项,您可以创建一个 java.dependency
条件:
when: java.dependency: name: junit.junit upperbound: 4.12.2 lowerbound: 4.4.0
when:
java.dependency:
name: junit.junit
upperbound: 4.12.2
lowerbound: 4.4.0
分析器 目前支持以下提供程序:
-
builtin
-
java
-
go
-
generic
下表总结了所有供应商及其功能:
供应商名称 | 功能 | 描述 |
---|---|---|
| 引用 | 查找带有可选代码位置的模式参考,以进行详细搜索。 |
dependency | 检查应用程序是否有给定的依赖项。 | |
| xml | 使用 xpath 查询搜索 XML 文件。 |
|
使用 | |
FileContent | 使用正则表达式模式搜索常规文件中的内容。 | |
file | 查找名称与给定模式匹配的文件。 | |
hasTags | 检查是否使用标记规则为应用程序创建了标签。 | |
| 引用 | 查找对模式的引用。 |
dependency | 检查应用程序是否有给定的依赖项。 |
按照上表中示例,您可以创建不包含任何条件字段的条件的第一个部分。
Example
创建使用 引用
能力的 java
供应商条件:
when: java.referenced: <fields>
when:
java.referenced:
<fields>
根据 供应商和 功能,条件中会出现不同的 < fields&
gt;。
下表总结了可用的供应商、其功能及其所有字段:
供应商 | 功能 | 字段 | 必填 | 描述 |
---|---|---|---|---|
java | 引用 | pattern | 是 | 正则表达式模式 |
位置 | 否 | 源代码位置(请参阅 Java 位置) | ||
annotated | 否 | 用于检查注解的额外查询(请参阅 注解检查)。 | ||
dependency | name | 是 | 依赖项的名称。 | |
nameregex | 否 | 与名称匹配的正则表达式模式。 | ||
upperbound | 否 | 匹配低于或等于的版本 | ||
lowerbound | 否 | 匹配大于或等于的版本 | ||
builtin | xml | xpath | 是 | XPath 查询 |
命名空间 | 否 | 映射到范围向下查询到命名空间 | ||
filepaths | 否 | 用于范围搜索的可选文件列表 | ||
json | xpath | 是 | XPath 查询 | |
filepaths | 否 | 用于范围搜索的可选文件列表 | ||
FileContent | pattern | 是 | 在内容中匹配的正则表达式模式 | |
filePattern | 否 | 仅在与此模式匹配的文件中搜索 | ||
文件 hasTags | pattern | 是 | 查找与此模式匹配的文件 | |
hasTags | 这是字符串标签的内联列表。请参阅 Tag 操作 | |||
go | 引用 | pattern | 是 | 正则表达式模式. |
dependency | name | 是 | 依赖项的名称。 | |
nameregex | 否 | 与名称匹配的正则表达式模式。 | ||
upperbound | 否 | 匹配低于或等于的版本。 | ||
lowerbound | 否 | 匹配大于或等于的版本。 |
Example
例如,要完成我们之前创建的 java
条件示例,请搜索软件包的引用:
when: java.referenced: location: PACKAGE pattern: org.jboss*
when:
java.referenced:
location: PACKAGE
pattern: org.jboss*
2.3.8.1. 内置供应商 复制链接链接已复制到粘贴板!
内置
是一个内部供应商,它可以分析引擎生成的各种文件和内部元数据。这个供应商有以下功能:
-
file
-
FileContent
-
xml
-
json
-
hasTags
file
通过使用 文件
功能,提供程序搜索源代码中与给定模式匹配的文件。
when: builtin.file: pattern: "<regex_to_match_filenames>"
when:
builtin.file:
pattern: "<regex_to_match_filenames>"
FileContent
通过使用 filecontent
功能,提供程序搜索与给定模式匹配的内容。
when: builtin.filecontent: filePattern: "<regex_to_match_filenames_to_scope_search>" pattern: "<regex_to_match_content_in_the_matching_files>"
when:
builtin.filecontent:
filePattern: "<regex_to_match_filenames_to_scope_search>"
pattern: "<regex_to_match_content_in_the_matching_files>"
xml
xml
功能可让供应商查询提供的 XML 文件列表中的 XPath 表达式。此功能采用 2 个输入参数 xpath
和 文件路径
。
json
通过使用 json
功能,供应商在提供的 JSON 文件列表中查询 XPath 表达式。目前,json
仅采用 XPath 作为输入,并对代码库中的所有 JSON 文件执行搜索。
when: builtin.json: xpath: "<xpath_expressions>"
when:
builtin.json:
xpath: "<xpath_expressions>"
- 1
XPath
必须是有效的 XPath 表达式。
hasTags
通过使用 hasTags
功能,供应商查询应用程序标签。它查询内部数据结构,以检查应用是否有给定的标签。
when: # when more than one tag is given, a logical AND is implied hasTags: - "tag1" - "tag2"
when:
# when more than one tag is given, a logical AND is implied
hasTags:
- "tag1"
- "tag2"
- 1
- 当有多个标签时,意味着一个逻辑 AND。
2.3.8.2. Java 供应商 复制链接链接已复制到粘贴板!
java
供应商分析 Java 源代码。
这个供应商有以下功能:
-
引用
-
依赖项
引用
通过使用 引用
的功能,供应商会在源代码中找到引用。此功能采用三种输入参数: 模式
、位置
和 注释
。
when: java.referenced: pattern: "<pattern>" location: "<location>" annotated: "<annotated>"
when:
java.referenced:
pattern: "<pattern>"
location: "<location>"
annotated: "<annotated>"
- 1
- 要匹配的正则表达式模式。
- 2
- 指定需要匹配模式的确切位置,例如
IMPORT
。 - 3
- 使用查询在 Java 代码中检查特定注解及其元素,如名称和值。例如,以下查询与方法中的
Bean
(url = "http://www.example.com”)注解匹配。annotated: pattern: org.framework.Bean elements: - name: url value: "http://www.example.com"
annotated: pattern: org.framework.Bean elements: - name: url value: "http://www.example.com"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.8.3. Java 位置 复制链接链接已复制到粘贴板!
java
提供程序允许将搜索范围到特定的源代码位置。
- 重要信息 :IMPORT 允许搜索类导入。它可以与 FQN 或星号一起使用,以允许更宽匹配:
java.referenced: pattern: org.apache.lucene.search* location: IMPORT
java.referenced:
pattern: org.apache.lucene.search*
location: IMPORT
在每个导入时匹配:
import org.apache.lucene.search.Query; import org.apache.lucene.search.Sort; import org.apache.lucene.search.SortField;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
建议直接在软件包后面放置结果范围,而不是在点后:
- PACKAGE: PACKAGE 位置与软件包使用匹配,可以是导入或用作代码中完全限定名称的一部分:
java.referenced: pattern: org.apache.lucene.search* location: PACKAGE
java.referenced:
pattern: org.apache.lucene.search*
location: PACKAGE
对导入和完全限定的使用匹配:
import org.apache.lucene.search.*;
import org.apache.lucene.search.*;
public class Test { private org.apache.lucene.search.Query query; }
public class Test {
private org.apache.lucene.search.Query query;
}
(*
)在软件包-separation dot (.
)之后正确,以获得更好的结果。
- CONSTRUCTOR_CALL 和 METHOD_CALL: 用于分别匹配构造器和方法。模式可能比较不同,可以匹配特定的返回类型、参数等。
例如,查找在 org.konveyor.MyClass
上声明的名为 "method" 的方法,该方法
返回扩展 java.lang.String
的类型列表并接受单个参数:
java.referenced: location: METHOD pattern: 'org.konveyor.Myclass.method(*) java.util.List<? extends java.lang.String>'
java.referenced:
location: METHOD
pattern: 'org.konveyor.Myclass.method(*) java.util.List<? extends java.lang.String>'
有关这些模式的可能性的更多信息,请参阅官方 Java 文档,其中包含在 createPattern (String, int, int, int)
部分中构建这些模式的所有信息。
目前,完全限定的静态方法匹配容易出错。
- TYPE :与类型匹配,一般情况下都显示.
- INHERITANCE :与从给定类型继承的类匹配。
- ANNOTATION: 匹配注释。
- IMPLEMENTS_TYPE :与实施给定类型的任何类型匹配。
- ENUM_CONSTANT: 匹配 enum 常量。
- RETURN_TYPE :与方法返回的类型匹配。
- VARIABLE_DECLARATION: 匹配作为变量声明的类型。
- FIELD (declaration): 与在字段声明中显示的类型匹配。它可以与注解匹配匹配,这是在字段上发生注解(请参阅 注解检查)
- METHOD :与给定方法声明匹配。它可以与注解匹配(请参阅 注解检查)。
- CLASS (声明):与给定的方法声明匹配。可以与注解匹配匹配(请参阅 注解检查)。
支持的位置如下:
-
CONSTRUCTOR_CALL
-
TYPE
-
继承
-
METHOD_CALL
-
注解
-
IMPLEMENTS_TYPE
-
ENUM_CONSTANT
-
RETURN_TYPE
-
IMPORT
-
VARIABLE_DECLARATION
-
字段
-
方法
依赖项
通过使用 依赖项
功能,供应商找到给定应用程序的依赖项。MTA 生成应用程序的依赖项列表,您可以使用此功能查询列表,并检查是否在依赖项版本范围内的应用程序中存在特定的依赖项。
when: java.dependency: name: "<dependency_name>" upperbound: "<version_string>" lowerbound: "<version_string>"
when:
java.dependency:
name: "<dependency_name>"
upperbound: "<version_string>"
lowerbound: "<version_string>"
2.3.8.4. 注解检查 复制链接链接已复制到粘贴板!
您可以添加查询以匹配特定注解及其元素,例如:
这与以下 Java 代码中的 runApplication
方法匹配:
注解的
YAML 元素的结构为:
annotated: pattern: a Java regex to match the fully qualified name of the annotation (optional) elements: an array of elements to match within the annotation (optional) - name: the exact name of the element to match against value: a Java regex to match the value of the element
annotated:
pattern: a Java regex to match the fully qualified name of the annotation (optional)
elements: an array of elements to match within the annotation (optional)
- name: the exact name of the element to match against
value: a Java regex to match the value of the element
也可以将注解与特定元素匹配,而不必指定其注解的符号。以下示例还与上例中的 @Bean
注解匹配:
使用 模式
指定的唯一元素是注释本身。
2.3.8.5. Go 供应商 复制链接链接已复制到粘贴板!
Go
供应商分析 Go 源代码。此提供程序的功能 被引用
,依赖项
为。
引用
通过使用 引用
的功能,供应商会在源代码中找到引用。
when: go.referenced: "<regex_to_find_reference>"
when:
go.referenced: "<regex_to_find_reference>"
依赖项
通过使用 依赖项
功能,供应商找到应用程序的依赖项。
when: go.dependency: name: "<dependency_name>" upperbound: "<version_string>" lowerbound: "<version_string>"
when:
go.dependency:
name: "<dependency_name>"
upperbound: "<version_string>"
lowerbound: "<version_string>"
2.3.8.6. dotnet 供应商 复制链接链接已复制到粘贴板!
dotnet
供应商是一个外部供应商,用于分析 .NET 和 Ccephfs 源代码。目前,供应商支持 引用
的功能。
引用
通过使用 引用
的功能,供应商会在源代码中找到引用。
when: dotnet.referenced: pattern: "<pattern>" namespace: "<namespace>"
when:
dotnet.referenced:
pattern: "<pattern>"
namespace: "<namespace>"
2.3.9. 条件模式 复制链接链接已复制到粘贴板!
Java 提供程序使用的 Language Server 是 Eclipse 的 JDTLS。在内部,JDTLS 使用 Eclipse Java Development Toolkit,其中包括在项目中搜索代码的工具。
在 java.referenced
条件的 pattern
元素中,您可以使用这些工具搜索应用程序代码。如需了解更多详细信息,请参阅 Class SearchPattern,其中包含为 createPattern (String, int, int, int, int)构建这些模式的所有信息
。
例子
在
javax.xml
软件包下搜索任何类,在任何位置发生:java.referenced: pattern: javax.xml*
java.referenced: pattern: javax.xml*
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告与软件包匹配时,如上例中所示,星号不能在点后。例如:*
pattern: javax.xml*
和 not: *pattern: javax.xml message
搜索返回
java.lang.String
的方法声明:java.referenced: location: METHOD pattern: '* java.lang.String'
java.referenced: location: METHOD pattern: '* java.lang.String'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
org.konveyor.MyClass
上搜索名为 "method" 的方法,该方法返回扩展java.lang.String
的类型列表:java.referenced: location: METHOD pattern: 'org.konveyor.Myclass.method(*) java.util.List<? extends java.lang.String>'
java.referenced: location: METHOD pattern: 'org.konveyor.Myclass.method(*) java.util.List<? extends java.lang.String>'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 搜索实现
java.util.List
的类:java.referenced: location: IMPLEMENTS_TYPE pattern: java.util.List
java.referenced: location: IMPLEMENTS_TYPE pattern: java.util.List
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.10. 自定义变量 复制链接链接已复制到粘贴板!
供应商条件可以关联有自定义变量。您可以使用自定义变量从源代码中的匹配行捕获相关信息。这些变量的值与源代码中匹配的数据进行干预。这些值可用于在规则的操作中生成详细的模板消息(请参阅 Message actions)。它们可以添加到 customVariables
字段中的规则中:
2.3.11. 逻辑条件 复制链接链接已复制到粘贴板!
分析器提供两个基本逻辑条件,和
或
,可用于聚合其他条件的结果并创建更复杂的查询。
2.3.11.1. AND 条件 复制链接链接已复制到粘贴板!
and
条件对条件数组的结果执行逻辑 AND 操作。
当 所有子
条件都匹配时,和 条件都匹配,例如:
when: and: - <condition1> - <condition2>
when:
and:
- <condition1>
- <condition2>
Example
2.3.11.1.1. 嵌套条件 复制链接链接已复制到粘贴板!
条件也可以嵌套在其他条件内。
- Example
2.3.11.2. OR 条件 复制链接链接已复制到粘贴板!
or
条件对条件数组的结果执行逻辑 OR 操作。
当其 任何子 条件匹配时,or
条件会匹配,例如:
when: or: - <condition1> - <condition2>
when:
or:
- <condition1>
- <condition2>
Example
2.3.11.3. 链条件变量 复制链接链接已复制到粘贴板!
您可以使用一个条件的输出作为在 和
或
条件中过滤另一个条件的输入。这称为 条件链。
Example
在上例中,builtin.file
条件的输出保存为 poms
:
+
[...] as: poms [...]
[...]
as: poms
[...]
然后,builtin.file
的变量可以在 builtin.xml
条件中使用,从
中写入,然后在 provider_ condition
块中使用 mustache 模板。
这是此特定条件知道如何使用变量设为名称 poms
。
+
[...] from: poms [...]
[...]
from: poms
[...]
然后,您可以通过将变量设置为 供应商 条件中的任何输入中的 mustached 模板来使用这些变量。
+
[...] filepaths: "{{poms.filepaths}}" [...]
[...]
filepaths: "{{poms.filepaths}}"
[...]
如果您只想将条件的值用作链,您可以设置 ignore: true
。
这将告知引擎不使用此条件来确定规则是否已违反:
+
[...] ignore: true [...]
[...]
ignore: true
[...]
2.3.11.3.1. Java 供应商中的链 复制链接链接已复制到粘贴板!
在 java
供应商中,filepath
s 变量必须大写。例如:
2.3.12. Rulesets(规则集) 复制链接链接已复制到粘贴板!
组规则形成规则集。MTA 不需要每个规则文件属于规则集,但您可以使用规则集来对实现常见目标的多个规则进行分组,并将规则传递给规则引擎。
您可以通过将一个或多个 YAML 规则放在目录中,并在目录 root 中创建 ruleset.yaml
文件来创建规则集。当您使用- rules
选项将此目录作为输入传递给 MTA CLI 时,此目录中的所有规则都将被视为 ruleset.yaml
文件定义的规则集的一部分。
ruleset.yaml
文件存储规则集的元数据。
name: "Name of the ruleset" description: "Description of the ruleset" labels: # - key=val
name: "Name of the ruleset"
description: "Description of the ruleset"
labels: #
- key=val
要执行任何应用程序分析,请输入:
mta-cli analyze --input=<application_to_analyze> --output=<output_dir> --rules=<custom_rule_dir> --enable-default-rulesets=false
$ mta-cli analyze --input=<application_to_analyze> --output=<output_dir> --rules=<custom_rule_dir> --enable-default-rulesets=false
-
将
<application_to_analyze
> 替换为应用程序的名称。 -
将
<output_dir
> 替换为您选择的目录。 -
将
<custom_rule_dir
> 替换为自定义规则集文件。
在启动时,mta-cli 工具决定了应用程序和分析所需的供应商。然后,它会在具有所需依赖项和工具的容器中启动提供程序。最后,提供商使用分析器来执行一系列规则集来分析源代码。
2.3.13. 创建基本 YAML 规则集模板 复制链接链接已复制到粘贴板!
如果要对多个类似的规则进行分组,可以通过将其文件放在一个目录中并在目录 root 中创建 ruleset.yaml
文件来为它们创建一个规则集。当您使用- rules
选项将此目录作为输入传递给 MTA CLI 时,MTA 会将目录中的所有文件视为属于 ruleset.yaml
文件中定义的规则集。
流程
如果要使用-
rules
选项传递整个目录,请为ruleset.yaml
文件创建一个模板:name: <RULESET_NAME> description: <RULESET_DESCRIPTION> labels: - key=val
name: <RULESET_NAME>
1 description: <RULESET_DESCRIPTION> labels:
2 - key=val
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.14. 创建 YAML 规则 复制链接链接已复制到粘贴板!
每个规则文件包含一个或多个 YAML 规则。每个规则都包含元数据、条件和操作。
流程
创建
when
条件。YAML 规则的
when
条件可以是provider
、和
或或
。创建
供应商
条件provider 条件用于定义对特定语言提供程序的搜索查询,并调用提供程序的特定功能。
条件的一般格式为 <
provider_name>.<capability>
。该条件还具有 inner 字段,用于指定搜索的详细信息。创建供应商
条件及其内部字段的方式取决于您使用的供应商以及您调用的功能。下表列出了可用的提供程序及其功能。选择一个供应商及其功能,以满足您要创建的规则的目的。条件的一部分还没有包含任何条件的字段。
Expand 供应商 功能 描述 java
引用
找到模式引用,包括注解,带有可选代码位置,用于详细搜索
依赖项
检查应用程序是否有给定依赖项
builtin
xml
使用 XPath 查询搜索 XML 文件
json
使用 JSONPath 查询搜索 JSON 文件
FileContent
使用 RegEx 模式搜索常规文件中的内容
file
查找名称与给定模式匹配的文件
hasTags
检查是否通过标记规则为应用程序创建标签
go
引用
查找模式引用
依赖项
检查应用程序是否有给定依赖项
以下示例显示了使用
引用
能力的java
供应商条件。Example
when: java.referenced:
when: java.referenced:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
为
供应商
条件添加合适的字段。下表列出了所有可用的供应商、其功能及其字段。选择属于您选择的供应商和功能的字段。请注意,一些字段是必须的。
Expand 供应商 功能 字段 必需? 描述 java
引用
pattern
是
RegEx pattern
位置
否
源代码位置;请参阅下面所有支持的搜索位置列表
annotated
否
注解及其元素(名称和值)
依赖项
name
是
依赖项的名称
nameregex
否
与名称匹配的正则表达式模式
upperBound
否
匹配小于或等于的版本号
lowerBound
否
匹配大于或等于的版本号
builtin
xml
xpath
是
XPath 查询
命名空间
否
映射到范围向下查询到命名空间
filepaths
否
用于范围搜索的可选文件列表
json
xpath
是
XPath 查询
filepaths
否
用于范围搜索的可选文件列表
FileContent
pattern
是
在内容中匹配的正则表达式模式
filePattern
否
仅在与此模式匹配的文件中搜索
file
pattern
是
查找与此模式匹配的名称的文件
hasTags
这是字符串标签的内联列表。有关标签格式的详情,请参阅 Rule Actions 中的 Tag Actions。
go
引用
pattern
是
RegEx pattern
依赖项
name
是
依赖项的名称
nameregex
否
与名称匹配的正则表达式模式
upperBound
否
匹配小于或等于的版本号
lowerBound
否
匹配大于或等于的版本号
以下搜索位置可用于范围
java
搜索:- CONSTRUCTOR_CALL
- TYPE
- 继承
- METHOD_CALL
- 注解
- IMPLEMENTS_TYPE
- ENUM_CONSTANT
- RETURN_TYPE
- IMPORT
VARIABLE_DECLARATION
以下示例显示搜索软件包引用的规则的
when
条件。Example
when: java.referenced: location: PACKAGE pattern: org.jboss*
when: java.referenced: location: PACKAGE pattern: org.jboss*
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建
AND
或OR
条件当
所有子
条件都匹配时,和 条件都匹配。创建和
条件,如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当任何子条件都匹配时,
或
条件会匹配。创建或
条件,如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.15. 使用自定义 YAML 规则运行分析 复制链接链接已复制到粘贴板!
要运行分析,请在 CLI 中使用-- rules
选项。
流程
要在一条规则文件
/home/<USER>/rule.yaml
中使用规则,请运行以下命令:mta-cli analyze --input /home/<USER>/data/ --output /home/<USER>/output/ --rules /home/<USER>/rule.yaml
mta-cli analyze --input /home/<USER>/data/ --output /home/<USER>/output/ --rules /home/<USER>/rule.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
-
/home/<USER>/data/
- 源代码或二进制的目录 -
/home/<USER>/output/
- 报告的目录(HTML 和 YAML)
-
-
要使用多个规则文件,您需要将它们放在目录中并添加
ruleset.yaml
文件。然后,目录被视为 规则集,您可以将其作为输入传递给规则
选项。
请注意,如果您要在 CLI 中使用-- target
或-- source
选项,则引擎将仅选择与该目标标签匹配的规则。因此,请确保您在规则上添加了目标或源标签。如需了解更多详细信息,请参阅 保留标签。