内容
Javaの各パッケージごとのJavaDocを一括生成するためのスクリプトをRubyで作成します。
要件は以下
・ルートフォルダにrbファイルを配置
・実行すると配下にあるすべてのパッケージにpackage-info.javaを作成
・package-info.javaの中身は以下
/** * "パッケージのパス"パッケージ。 * * <pre> * // TODO パッケージ内容の詳細を記述してください * </pre> * */ package パッケージのパス;
ソースコード
# encoding: Windows-31J require "erb" require 'find' PACKAGE_INFO = "package-info.java" # package-info.javaのコードを生成する def generate_package_info_code(package_info) # package-info.javaのテンプレートを定義 template =<<EOS /** * <%=package_info%>パッケージ。 * * <pre> * <%=class_info_detail%> * </pre> * */ package <%=package_info%>; EOS out = ERB.new(template) class_info_detail = "// TODO パッケージ内容の詳細を記述してください" package_info = package_info return out.result(binding) end # fileの階層からパッケージ名を生成 def get_package_name(file) return file.slice(2,file.size).gsub(/\//,".") end # fileパスにcodeの内容を出力する def generate_package_info_file(file, code) return if file == "./" file = open("#{file}/#{PACKAGE_INFO}", "w") file.puts code file.close end # カレントフォルダ配下の全フォルダに対して処理 Find.find('./').each do |file| if File.directory?(file) package_info_code = generate_package_info_code(get_package_name(file)) generate_package_info_file(file, package_info_code) end end puts "出力完了。出力結果" file_list = [] Find.find('./').each do |file| puts file if (File.basename(file) == PACKAGE_INFO) end
出力結果サンプル抜粋
./jp/
./jp/co/
./jp/co/package1/
./jp/co/package1/package1_1/
./jp/co/package1/package1_2/
./jp/co/package2/
./jp/co/package2/package2_1/
./jp/co/package2/package2_2/
に対して実行。
※出力確認用標準出力
出力完了。出力結果 ./jp/co/package-info.java ./jp/co/package1/package-info.java ./jp/co/package1/package1_1/package-info.java ./jp/co/package1/package1_2/package-info.java ./jp/co/package2/package-info.java ./jp/co/package2/package2_1/package-info.java ./jp/co/package2/package2_2/package-info.java ./jp/package-info.java
実際に出力されたファイルの1例を確認
対象=./jp/co/package1/package1_1/package-info.java
/** * jp.co.package1.package1_1パッケージ。 * * <pre> * // TODO パッケージ内容の詳細を記述してください * </pre> * */ package jp.co.package1.package1_1;