创建使用favicon的Javadoc HTML页面

时间:2012-10-28 19:14:56

标签: java ant javadoc favicon

我想在生成的Javadoc HTML的<head>中包含一个元素:

<link rel="shortcut icon" href="my-project-icon.ico" />

请注意,我正在使用Ant任务来生成Javadoc。

我尝试使用Ant任务的<header>元素,但放在那里的任何标记最终都在<h1>标记内,该标记无效,因此被浏览器忽略。

3 个答案:

答案 0 :(得分:2)

我肯定会将输出文件修改为一个简单的强力解决方案。但一种复杂的方法是拥有一个自定义doclet。此doclet将是标准doclet(Where can you download the source for the standard JavaDoc doclet for current releases (1.5 or 1.6))的副本。

HtmlDocletWriter.java中,有许多行head.addContent。您可以添加一个这样的行,可能基于HtmlTree.LINK

答案 1 :(得分:2)

我们使用以下bash / sed脚本采用“强力”方法。

(请注意,javadoc在创建的目录中创建一些名为“* .html”的丑陋文件, 当sed尝试处理它们时会导致错误消息。我们还没有想出如何避免这种情况,但它似乎对我们的目的无害! - )

当然,xslt脚本会更专业,...

#!/bin/sh
# patch favicon into header of javadoc generated api doc html 
#
# assume started with P=`pwd` , then the args must be
# 1 directory to process / full path relative to  $P
# 2 favicon filename to insert / full path relative to $P
function patchIt () {
   for f in $1/*.html ; do  
     tmpfile=`mktemp -p . `
     sed -e " s%<HEAD>%<HEAD><link rel=\"icon\" href=\"$2\" type=\"image/png\"/>%" \
         $f > $tmpfile  ; mv $tmpfile  $f ; 
   done ; 
   for d in $1/* ; do 
     if [ -d $d ]; then echo "descending to "$d ; patchIt $d ../$2 ; fi ; 
   done
}
patchIt $1 $2 
#eof

答案 2 :(得分:0)

马库斯的解决方案是一个良好的开端。谢谢你提供它!

然而,它有一些问题:

  • 如果目录不包含任何.html文件,则会创建一个文件 名为*.html
  • 它不会向JDK 8版本的javadoc生成的HTML文件添加favicon,该版本使用<head>而不是<HEAD>
  • 如果多次运行,它会多次插入favicon。
  • mktemp命令不可移植(例如,在Mac OS上不起作用)。
  • 它不保留文件权限。

这是一个纠正这些问题的版本。可以在expanded version存储库中找到html-tools。如果您发现问题或想提出改进建议,请在此处发表评论或使用html-tools issue tracker

#!/bin/sh
# Add favicon to header of HTML files.
# One use case is for javadoc-generated API documentation.
#
# Run like this:
# add-favicon <directory> <favicon.png>
# The arguments should be paths relative to the current working directory.

# Once this has been run, running it another time has no effect.

patchIt () {
  for f in $1/*.html ; do
    if [ -f "$f" ]; then     # if no .html files exist, f is literal "*.html"
      tmpfile=`mktemp patch_favicon_XXXXX`
      # This creates tmpfile, with the same permissions as $f.
      # The next command will overwrite it but preserve the permissions.
      # Hat tip to http://superuser.com/questions/170226/standard-way-to-duplicate-a-files-permissions for this trick.
      \cp -p $f $tmpfile
      sed -e " s%<head>\$%<head><link rel=\"icon\" href=\"$2\" type=\"image/png\"/>%" $f > $tmpfile
      mv -f $tmpfile $f
    fi;
  done ;
  for d in $1/* ; do
    if [ -d $d ]; then echo "descending to "$d ; patchIt $d ../$2 ; fi ;
  done
}

patchIt $1 $2

#eof