Maven插件限制使用特定包

Nee*_*raj 12 java maven-plugin maven-3 maven

我在一个由大约40名开发人员组成的团队中工作,我不希望任何开发人员使用某些特定的API(确切地说是java.sun.Base64)供任何开发人员使用,而是让他们使用sun API的替代品作为其专有.

是否有任何maven插件,通过它,在pom.xml中指定受限制的包,如果在代码中的任何地方使用任何这些包,构建将会中断?

或者有更优雅的方式来做到这一点?

谢谢

Mar*_*nor 8

您希望为项目定义体系结构规则,最好通过源代码分析来实施.

Sonar现在能够在项目的质量仪表板上指定此类规则并显示违规.如果您希望构建中断,可以另外完成启用Sonar的Build breaker插件.

Sonar非常易于设置,并且可以集成到您的Maven构建过程中,而无需更改POM.


Mac*_*arz 7

看看这个:

<plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>macker-maven-plugin</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <executions>
          <execution>
            <phase>compile</phase>
            <goals>
              <goal>macker</goal>
            </goals>
          </execution>
        </executions>      
      </plugin>
Run Code Online (Sandbox Code Playgroud)

其中规则定义为不允许导入java.lang.System

<?xml version="1.0"?>
<macker>    
    <ruleset name="Testing rules">
        <pattern name="mypackage" class="org.codehaus.mojo.**" />
        <access-rule>
            <message>System out is bad. Use logging instead.</message>
            <deny>
                <to>
                    <include class="java.lang.System" />
                </to>
            </deny>
            <!--allow>
                <from pattern="blah" />
            </allow-->
        </access-rule>
    </ruleset>
</macker>
Run Code Online (Sandbox Code Playgroud)


Kaa*_* Yy 6

这是我为类似目的编写的插件.

细节可以在这里看到:https://github.com/yamanyar/restrict-maven-plugin/wiki

限制从com.ya*到java.util.regex的所有访问.*

<restriction>com.ya* to java.util.regex.*</restriction>
Run Code Online (Sandbox Code Playgroud)

限制从com.ya*(com.yamanyar.core除外)到java.util.regex的所有访问.,

<restriction>com.ya*,!com.yamanyar.core.* to java.util.regex.*</restriction>
Run Code Online (Sandbox Code Playgroud)

限制从com.ya*(com.yamanyar.core除外)和com.abc.Test到java.util.regex的所有访问.

<restriction>com.ya*,com.abc.Test,!com.yamanyar.core.* to java.util.regex.*</restriction>

限制从com.ya*(com.yamanyar.core除外)和com.abc.Test到java.util.regex的所有访问.(java.util.regex.Matcher除外)<restriction>com.ya*,com.abc.Test,!com.yamanyar.core.* to java.util.regex.*,!java.util.regex.Matcher</restriction>

限制从com.ya*(com.yamanyar.core除外)和com.abc.Test到java.util.regex的所有访问.(java.util.regex.Matcher除外); 并将com.ya*(com.yamanyar.core除外)限制为java.io.PrintStre .print*()

<restriction>com.ya*,com.abc.Test,!com.yamanyar.core.* to java.util.regex.*,!java.util.regex.Matcher</restriction>
<restriction>com.ya*,!com.yamanyar.core* to java.io.PrintStre*.print*()</restriction>
Run Code Online (Sandbox Code Playgroud)