首页 > 解决方案 > 检查 pom.xml 以符合 github 页面的 mvn site 命令

问题描述

当尝试将我的开源项目发布到 gh-pages 时

mvn site

由于 maven 和 github 页面工作方式的变化,最近出现了很多障碍。

学习后

以下是我发现的一些必要的先决条件和遇到的问题:

先决条件

  1. git 分支需要显示一个 gh-pages 分支,例如在使用https://gist.github.com/ramnathv/2227408中的命令之后
  2. maven-site-plugin 和 maven-project-info-reports-plugin 的版本必须正确且配置正确:maven-site plugins 3.3 java.lang.ClassNotFoundException: org.apache.maven.doxia.siterenderer.DocumentContent
  3. dependency.locations.enabled 属性需要为 false为什么我收到 Maven 错误:“无法确定 http://maven.glassfish.org/content/groups/glassfish 中是否存在资源 X”?

问题

甚至没有提到我必须用于 ssh-wagon 和 Java8 javadoc 等的解决方法

恕我直言,使用的插件是“移动目标”。根据我的经验,几个月前有效的东西今天不会有效。所以我一直在修复我的 pom.xml 文件以跟上并且文件变得越来越长。

参见例如https://github.com/BITPlan/com.bitplan.simplerest/blob/master/pom.xml

对于我的内部项目,我使用父 pom 来确保项目具有通用配置。对于开源项目,我还没有找到将父 pom 用于一组项目的方法。

我想确保我找到的工作配置被“转移”到其他配置。我在想例如

  1. 一个可能检查配置的脚本
  2. 某种继承机制,例如父 pom

我认为这是一个非常普遍的问题,并且 SO 用户有关于如何在不同项目中解决此问题的经验。

什么是好方法,什么工具有用?

  1. 带有 pom 包装的父 pom maven 中的“pom”包装是什么? 主要说明了在多模块项目中使用 pom 打包,但看起来它可以用来为父 pom 提供参考。parentPath 默认为 .. 参见Maven: Non-resolvable parent POM。Maven中解释了配置的覆盖:是否可以覆盖已经为父 POM 中的配置文件定义的插件的配置

移动目标示例

标签: mavengithub-pagesmaven-site-plugin

解决方案


正如khmarbaise所建议的,现在有一个共同的父 pom

mvn site

可以使用此父 pom和一组通用报告为所有项目运行,结果将传输到相应的 github 页面。

一个项目特定的 pom 现在可以短至 25 行

我现在实际上正在为 pom 文件创建一个检查脚本,并为 README.md 文件创建一个生成脚本。这是有用的片段之一:

用法示例:

checkghpages https://github.com/BITPlan com.bitplan.simplerest

检查 gh-pages 是否存在并在询问后创建

#
# check the github pages for the given project
# 
# param 1: base url in github
# param 2: project name/directory
#
checkghpages() {
  local l_baseurl="$1"
  local l_project="$2"
  cd $ws/$l_project
  git ls-remote --heads | grep gh-pages > /dev/null
  if [ $? -ne 0 ]
  then
    color_msg $red "github pages branch gh-pages missing for $l_project"
    color_msg $blue "shall i create the branch gh-pages for $l_project?"
    read answer
    case $answer in
      y|Y|yes|Yes|j|Ja) 
        color_msg $blue "creating gh-pages branch for $l_project ..."
        cd /tmp
        # https://gist.github.com/ramnathv/2227408
        git clone $l_baseurl/$l_project
        cd $l_project
        git symbolic-ref HEAD refs/heads/gh-pages
        rm .git/index
        git clean -fdx
        echo "<a href='$l_baseurl/$l_project'>Initial GitHub Page for $l_project</a>" > index.html
        git add .
        git commit -a -m "First pages commit by checkos script"
        git push origin gh-pages
        cd $ws/$l_project
        git pull
      ;;
    esac
  else
    color_msg $green "github pages branch gh-pages for $l_project exists✓"
  fi
}

推荐阅读