Maven在pom.xml上强制执行一些规则

时间:2013-12-09 15:57:55

标签: java maven

所以这就是我遇到的问题,我想禁止用户在他们的pom.xml中使用本地存储库。我可以用enforcer插件做到这一点,但同时没有什么能阻止某人删除插件并在没有插件的情况下运行项目。如果有一种方法可以将这些强制执行放在settings.xml中,或者可能以某种方式扩展maven,那将会非常酷。

一般的想法是,我希望用户仍然运行相同的“干净安装”,如果在pom.xml中配置了本地存储库,则项目应该失败。

maven甚至可以吗?

修改 为了简单起见:当我对一个在其中配置了存储库的pom运行“mvn clean install”时,构建必须失败。请注意,除非可以使用settings.xml配置,否则我不想使用某种插件来实现这一点。 我为什么要这样?因为它在我们的案例中混淆了自动构建,所以必须在settings.xml中配置外部存储库,而不是在每个pom中本地配置外部存储库。

2 个答案:

答案 0 :(得分:0)

创建新的pom模块,它将执行ant任务以根据所需的x-path验证目标pom.xml。

答案 1 :(得分:0)

我最终在jar文件maven-model-builder-3.0.5.jar中编辑了maven Super pom。我添加了没有存储库规则的enforcer插件。似乎工作正常。 全部都有一个简单的脚本。这是脚本 - 可能会变得更好(我到目前为止不是脚本专家:)):

 #!/bin/sh
 #couple of safety checks
 if [ "$#" -ne 1 ]; then 
     echo "usage: ./maven-enforcer.sh <path_to_the_maven_install_lib_folder>"
     echo "1 argument required, $# provided"
     exit 1
 fi

 if [ ! -d $1 ]; then
     echo "directory '$1' does not exist, exiting..."
     exit 1
 fi

 if [ ! -e $1/maven-model-builder-3.0.5.jar ]; then
      echo "file 'maven-model-builder-3.0.5.jar' does not exist in directory $1, exiting..."
      exit 1
 fi

 #back-up the already existing jar
 cp $1/maven-model-builder-3.0.5.jar $1/maven-model-builder-3.0.5_backup.jar

 cd $1

 #unpack the contents of the jar
 jar xf $1/maven-model-builder-3.0.5.jar

 cd org/apache/maven/model/

 #test if the command did not run already
 didItRunAlready=`grep -n "maven-enforcer-plugin" pom-4.0.0.xml | cut -f1 -d:`

 if [[ ! -z "$didItRunAlready" ]]; then
    echo "Command already run once, exiting..."
    exit 1
 fi

 lineNumber=`grep -n "</pluginManagement>" pom-4.0.0.xml | cut -f1 -d:`

 textToAdd="<plugins>\n<plugin>\n<groupId>org.apache.maven.plugins</groupId>\n<artifactId>maven-enforcer-plugin</artifactId>\n<version>1.3.1</version>\n<executions>\n<execution>\n<id>enforce-no-repositories</id>\n<goals>\n<goal>enforce</goal>\n</goals>\n<configuration>\n<rules>\n<requireNoRepositories>\n<message>Best Practice is to never define repositories in pom.xml (use a repository manager instead)</message>\n</requireNoRepositories>\n</rules>\n</configuration>\n</execution>\n</executions>\n</plugin></plugins>"

 sed ""$lineNumber"a $textToAdd" pom-4.0.0.xml > result.xml 
 rm pom-4.0.0.xml
 mv result.xml pom-4.0.0.xml

 cd ../../../../

 jar vfu maven-model-builder-3.0.5.jar org/

 rm -fr META-INF
 rm -fr org

 echo "Succesfully updated maven-model-builder-3.0.5.jar"