在eclipse中制作API参考文档

具体可参考IBM的文章:[url]http://www.ibm.com/developerworks/cn/rational/07/0320_alupului/[/url]。

谈一下遇到的问题,首先是从工程里导出API的html文档,本次导出涉及133个插件工程,内存占用量高达630M,全部导完花去10-20分钟。
导出设置时注意以下配置:
[img]http://dl.iteye.com/upload/attachment/0063/2247/a6a2ab55-8cb5-3081-b90b-4663af25032b.jpg[/img]
分配内存最大值设为1024M,编码方式设为utf-8。

导完后,需要划分Topic,将这些Topic链接到API参考文档里,便于分工协作。所有的TOC文件都必须在plugin.xml里注册。为了避免手工进行Topic划分和Topic下的package注册,使用以下程序自动生成相关TOC文件并完成在plugin.xml里的注册和API参考文档里的link。

package org.autumn.doc.user.generate;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import org.autumn.doc.user.Activator;

/**
* 1 - topics目录下生成TOC文件 <br/>
* 2 - plugin.xml里注册TOC文件 <br/>
* 3 - topics_Reference.xml里注册TOC文件
*
* @author sunny
*
*/
public class GeneratePluginToc {
public static final String DOC_DIR = "doc";
public static final String TOPICS_DIR = "topics";
public static final String WS_DIR = "E:\\Autumn BPM\\ws4bpm";
public static final String TOPICS_FILE_EXTENSION = ".toc.xml";
public static final String PLUGIN_XML = "plugin.xml";
public static final String SUMMARY_HTML = "package-summary.html";
public static final String TOPICS_REFERENCE_XML = "topics_Reference.xml";
public static final String SEPRATOR = System.getProperty("file.separator");
public static final String DOT = ".";

private static List<String> plugins = new ArrayList<String>();
static {
plugins.add("org.autumn.action.core");
plugins.add("org.autumn.action.interceptor.navigator");
plugins.add("org.autumn.action.interceptor.spec");
plugins.add("org.autumn.action.layout");
plugins.add("org.autumn.action.model");
plugins.add("org.autumn.ado.core");
plugins.add("org.autumn.ado.spec");
plugins.add("org.autumn.bpm.behavior");
plugins.add("org.autumn.bpm.client");
plugins.add("org.autumn.bpm.commons");
plugins.add("org.autumn.bpm.core");
plugins.add("org.autumn.bpm.data");
plugins.add("org.autumn.bpm.engine");
plugins.add("org.autumn.bpm.event.register");
plugins.add("org.autumn.bpm.event.thrower");
plugins.add("org.autumn.bpm.event.trigger");
plugins.add("org.autumn.bpm.loadbalance");
plugins.add("org.autumn.bpm.resource.service");
plugins.add("org.autumn.bpm.runtime");
plugins.add("org.autumn.builder");
plugins.add("org.autumn.cluster");
plugins.add("org.autumn.common.constraint");
plugins.add("org.autumn.configuration.bpm");
plugins.add("org.autumn.configuration.scheduler");
plugins.add("org.autumn.core");
plugins.add("org.autumn.database");
plugins.add("org.autumn.entity");
plugins.add("org.autumn.evaluation");
plugins.add("org.autumn.expression.core");
plugins.add("org.autumn.expression.defs");
plugins.add("org.autumn.expression.expand");
plugins.add("org.autumn.expression.json.factory");
plugins.add("org.autumn.expression.json.render");
plugins.add("org.autumn.expression.sql.factory");
plugins.add("org.autumn.expression.sql.render");
plugins.add("org.autumn.form.service");
plugins.add("org.autumn.identity");
plugins.add("org.autumn.logicview.core");
plugins.add("org.autumn.logicview.expand");
plugins.add("org.autumn.logicview.model");
plugins.add("org.autumn.model.core");
plugins.add("org.autumn.model.data");
plugins.add("org.autumn.model.defs");
plugins.add("org.autumn.model.editdomain");
plugins.add("org.autumn.model.extension");
plugins.add("org.autumn.model.loader");
plugins.add("org.autumn.model.navigator.core");
plugins.add("org.autumn.operator");
plugins.add("org.autumn.scheduler.core");
plugins.add("org.autumn.scheduler.engine");
plugins.add("org.autumn.scheduler.model");
plugins.add("org.autumn.sdo");
plugins.add("org.autumn.type");
plugins.add("org.autumn.ui.decorator");
plugins.add("org.autumn.view.data");
plugins.add("org.autumn.view.feature");
plugins.add("org.autumn.viewspec.core");
plugins.add("org.autumn.viewspec.expand");
plugins.add("org.autumn.viewspec.model");
}

private static void generateAll() {
generateTocs();
regeisterPluginXML();
regeisterTopicsReferenceXML();
}

private static void generateTocs() {
File topicsDir = new File(getProjectPath() + SEPRATOR + TOPICS_DIR);
for (File topic : topicsDir.listFiles()) {
topic.delete();
}

for (String plugin : plugins) {
File toc = new File(topicsDir + SEPRATOR + plugin
+ TOPICS_FILE_EXTENSION);
if (!toc.exists()) {
try {
toc.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}

try {
PrintWriter writer = new PrintWriter(toc);
writer.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
writer.printf("<toc label=\"%s\">%n", plugin);

String docPath = getProjectPath() + SEPRATOR + DOC_DIR;
File pluginDocDir = new File(docPath + SEPRATOR
+ plugin.replaceAll("\\" + DOT, "/"));

printTopicLine(writer, plugin, pluginDocDir);

writer.println("</toc>");
writer.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}

private static void printTopicLine(PrintWriter writer, String plugin,
File dir) {
List<String> files = new ArrayList<String>();
for (File f : dir.listFiles()) {
files.add(f.getName());
}
for (File f : dir.listFiles()) {
if (files.contains(SUMMARY_HTML)) {
String path = dir.getPath().replace("\\", "/");
String uriLike = plugin.replace(DOT, "/");
String label = path.substring(path.indexOf(uriLike));
String href = DOC_DIR + "/" + label + "/" + SUMMARY_HTML;
writer.printf("\t<topic href=\"%s\" label=\"%s\">%n", href,
label.replaceAll("/", DOT));
writer.println("\t</topic>");

files.remove(SUMMARY_HTML);
}

if (f.isDirectory()) {
printTopicLine(writer, plugin, f);
}
}
}

private static void regeisterTopicsReferenceXML() {
File topicsReferenceXML = new File(getProjectPath() + SEPRATOR
+ TOPICS_REFERENCE_XML);
try {
PrintWriter writer = new PrintWriter(topicsReferenceXML);
writer.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
writer.println("<?eclipse version=\"3.4\"?>");
writer.println("<toc label=\"API文档\">");

File topicsDir = new File(getProjectPath() + SEPRATOR + TOPICS_DIR);
for (File file : topicsDir.listFiles()) {
String plugin = file.getName().replace(TOPICS_FILE_EXTENSION,
"");
String href = DOC_DIR + "/" + plugin.replace(DOT, "/") + "/"
+ SUMMARY_HTML;
writer.printf("\t<topic href=\"%s\" label=\"%s\">%n", href,
plugin);
writer.printf("\t\t<link toc=\"%s\">%n", TOPICS_DIR + "/"
+ file.getName());
writer.println("\t\t</link>");
writer.println("\t</topic>");
}

writer.println("</toc>");
writer.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}

private static void regeisterPluginXML() {
File pluginXML = new File(getProjectPath() + SEPRATOR + PLUGIN_XML);
try {
PrintWriter writer = new PrintWriter(pluginXML);
writer.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
writer.println("<?eclipse version=\"3.4\"?>");
writer.println("<plugin>");
writer.println("\t<extension point=\"org.eclipse.help.toc\">");
writer.println("\t\t<toc file=\"toc.xml\" primary=\"true\">");
writer.println("\t\t</toc>");
writer.println("\t\t<index path=\"index\">");
writer.println("\t\t</index>");
writer.println("\t</extension>");
writer.println("\t<extension point=\"org.eclipse.help.toc\">");
writer.println("\t\t<toc file=\"topics_Guide.xml\">");
writer.println("\t\t</toc>");
writer.println("\t</extension>");
writer.println("\t<extension point=\"org.eclipse.help.toc\">");
writer.printf("\t\t<toc file=\"%s\">%n", TOPICS_REFERENCE_XML);
writer.println("\t\t</toc>");

File topicsDir = new File(getProjectPath() + SEPRATOR + TOPICS_DIR);
for (File file : topicsDir.listFiles()) {
writer.printf("\t\t<toc file=\"%s\">%n", TOPICS_DIR + "/"
+ file.getName());
writer.println("\t\t</toc>");
}

writer.println("\t</extension>");
writer.println("</plugin>");
writer.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}

private static String getProjectPath() {
return WS_DIR + SEPRATOR + Activator.PLUGIN_ID;
}

public static void main(String[] args) {
GeneratePluginToc.generateAll();
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值