3

<head>生成した Javadoc HTML に要素を含めたい:

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

Ant タスクを使用して Javadoc を生成していることに注意してください。

Ant タスクの要素を使用しようとしました<header>が、そこに配置されたマークアップは<h1>タグ内に配置されてしまい、これは無効であるため、ブラウザーによって無視されます。

4

3 に答える 3

2

簡単なブルート フォース ソリューションとして、出力ファイルを間違いなく変更します。しかし、洗練された方法は、カスタム ドックレットを使用することです。このドックレットは、標準ドックレットのコピーになります (現在のリリース (1.5 または 1.6) の標準 JavaDoc ドックレットのソースはどこからダウンロードできますか)。

HtmlDocletWriter.javaは多くの行がありますhead.addContent。おそらく に基づいて、そのような行をもう 1 つ追加しHtmlTree.LINKます。

于 2012-10-28T21:08:46.217 に答える
2

マーカスのソリューションは良いスタートです。提供してくれてありがとう!

ただし、いくつかの問題があります。

  • ディレクトリに .html ファイルが含まれていない場合は、.html という名前のファイルが作成されます*.html
  • JDK 8 バージョンの javadoc によって生成された HTML ファイルにはファビコンを追加しませ<head><HEAD>
  • 複数回実行すると、ファビコンが複数回挿入されます。
  • mktemp コマンドは移植性がありません (たとえば、Mac OS では機能しません)。
  • ファイルのアクセス許可は保持されません。

これらの問題を修正したバージョンを次に示します。拡張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
于 2015-03-08T00:18:39.603 に答える
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
于 2012-11-07T12:24:21.290 に答える