Confluence 宏插件显示为已安装,但宏不起作用
Confluence Macro Plugin is shown as installed but Macro does not work
我正在尝试为我的公司在 Confluence 中编写一个插件,我使用了这个教程:https://developer.atlassian.com/confdev/tutorials/macro-tutorials-for-confluence/creating-a-new-confluence-macro 并按照教程告诉我的做了所有事情,但是宏不起作用,它显示为当我尝试使用 Confluence 中的未知宏时。但是插件本身显示为已安装和激活。
我在 Eclipse Luna 上编程并通过 Atlas-运行 选项在本地使用 Confluence 5.9..2 运行。
这是我的源代码:
主文件:
package com.company.confluence.plugin;
import java.util.ArrayList;
import java.util.List;
import com.atlassian.confluence.content.render.xhtml.XhtmlException;
import com.atlassian.confluence.xhtml.api.MacroDefinition;
import com.atlassian.confluence.xhtml.api.MacroDefinitionHandler;
import java.util.Map;
import com.atlassian.confluence.xhtml.api.XhtmlContent;
import com.atlassian.confluence.content.render.xhtml.ConversionContext;
import com.atlassian.confluence.macro.Macro;
import com.atlassian.confluence.macro.MacroExecutionException;
public class MyConfluenceMacro implements Macro {
private final XhtmlContent xhtmlUtils;
public MyConfluenceMacro(XhtmlContent xhtmlUtils)
{
this.xhtmlUtils = xhtmlUtils;
}
public String execute(Map<String, String> parameters, String bodyContent,
ConversionContext conversionContext) throws MacroExecutionException {
String body = conversionContext.getEntity().getBodyAsString();
final List<MacroDefinition> macros = new ArrayList<MacroDefinition>();
System.out.println("===============================================");
System.out.println("Part 1");
System.out.println("===============================================");
try {
xhtmlUtils.handleMacroDefinitions(body, conversionContext,
new MacroDefinitionHandler() {
@Override
public void handle(MacroDefinition macroDefinition) {
macros.add(macroDefinition);
System.out.println("===============================================");
System.out.println("Part 2");
System.out.println("===============================================");
}
});
} catch (XhtmlException e) {
throw new MacroExecutionException(e);
}
StringBuilder builder = new StringBuilder();
builder.append("<p>");
if (!macros.isEmpty()) {
builder.append("<table width=\"50%\">");
builder.append("<tr><th>Macro Name</th><th>Has Body?</th></tr>");
for (MacroDefinition defn : macros) {
System.out.println("===============================================");
System.out.println("Part 3");
System.out.println("===============================================");
builder.append("<tr>");
builder.append("<td>").append(defn.getName())
.append("</td><td>").append(defn.hasBody())
.append("</td>");
builder.append("</tr>");
}
builder.append("</table>");
}
else
{
builder.append("you´ve done building yourself a macro! Nice Worku! Work Work!");
System.out.println("===============================================");
System.out.println("Part 4");
System.out.println("===============================================");
}
builder.append("</p>");
return builder.toString();
}
@Override
public BodyType getBodyType() {
return BodyType.NONE;
}
@Override
public OutputType getOutputType() {
return OutputType.BLOCK;
}
}
和 atlassian-plugin.xml:
<atlassian-plugin key="${atlassian.plugin.key}" name="${project.name}" plugins-version="2">
<plugin-info>
<description>${project.description}</description>
<version>${project.version}</version>
<vendor name="${project.organization.name}" url="${project.organization.url}" />
</plugin-info>
<xhtml-macro name="company-confluence-macro" class="com.company.confluence.plugin.MyConfluenceMacro" key="my-macro">
<parameters/>
</xhtml-macro>
<!-- add our i18n resource -->
<resource type="i18n" name="i18n" location="company-confluence-macro"/>
</atlassian-plugin>
教程已弃用,如果有人在创建 confluence 宏时遇到问题:
-atlas-create-confluence-macro
-delete test folder
-atlas-mvn eclispe:eclipse
-import project to your eclipse workspace
-create macro class like in tutorial.(this should be your only class on this stage, delete others)
-add this to your atlassian-plugin.xml behind i18n resource line.
(modify "class=" variable for your project)
<xhtml-macro name="PLUGIN" class="com.project.xxx.mymacro" key="mymacro" icon="/download/resources/${project.groupId}.${project.artifactId}/images/pluginIcon.png">
<category name="external-content"/>
<parameters>
<parameter name="link" type="string" required="true"/>
</parameters>
<description>Inserts a calendar for the week into the current page</description>
</xhtml-macro>
-atlas-package
-atlas-run
-atlas-install-plugin
这对我在 atlas-6.2.6 上有用,我知道这个问题很老了,但仍然存在问题。许多答案不明确或已弃用...
我正在尝试为我的公司在 Confluence 中编写一个插件,我使用了这个教程:https://developer.atlassian.com/confdev/tutorials/macro-tutorials-for-confluence/creating-a-new-confluence-macro 并按照教程告诉我的做了所有事情,但是宏不起作用,它显示为当我尝试使用 Confluence 中的未知宏时。但是插件本身显示为已安装和激活。
我在 Eclipse Luna 上编程并通过 Atlas-运行 选项在本地使用 Confluence 5.9..2 运行。
这是我的源代码:
主文件:
package com.company.confluence.plugin;
import java.util.ArrayList;
import java.util.List;
import com.atlassian.confluence.content.render.xhtml.XhtmlException;
import com.atlassian.confluence.xhtml.api.MacroDefinition;
import com.atlassian.confluence.xhtml.api.MacroDefinitionHandler;
import java.util.Map;
import com.atlassian.confluence.xhtml.api.XhtmlContent;
import com.atlassian.confluence.content.render.xhtml.ConversionContext;
import com.atlassian.confluence.macro.Macro;
import com.atlassian.confluence.macro.MacroExecutionException;
public class MyConfluenceMacro implements Macro {
private final XhtmlContent xhtmlUtils;
public MyConfluenceMacro(XhtmlContent xhtmlUtils)
{
this.xhtmlUtils = xhtmlUtils;
}
public String execute(Map<String, String> parameters, String bodyContent,
ConversionContext conversionContext) throws MacroExecutionException {
String body = conversionContext.getEntity().getBodyAsString();
final List<MacroDefinition> macros = new ArrayList<MacroDefinition>();
System.out.println("===============================================");
System.out.println("Part 1");
System.out.println("===============================================");
try {
xhtmlUtils.handleMacroDefinitions(body, conversionContext,
new MacroDefinitionHandler() {
@Override
public void handle(MacroDefinition macroDefinition) {
macros.add(macroDefinition);
System.out.println("===============================================");
System.out.println("Part 2");
System.out.println("===============================================");
}
});
} catch (XhtmlException e) {
throw new MacroExecutionException(e);
}
StringBuilder builder = new StringBuilder();
builder.append("<p>");
if (!macros.isEmpty()) {
builder.append("<table width=\"50%\">");
builder.append("<tr><th>Macro Name</th><th>Has Body?</th></tr>");
for (MacroDefinition defn : macros) {
System.out.println("===============================================");
System.out.println("Part 3");
System.out.println("===============================================");
builder.append("<tr>");
builder.append("<td>").append(defn.getName())
.append("</td><td>").append(defn.hasBody())
.append("</td>");
builder.append("</tr>");
}
builder.append("</table>");
}
else
{
builder.append("you´ve done building yourself a macro! Nice Worku! Work Work!");
System.out.println("===============================================");
System.out.println("Part 4");
System.out.println("===============================================");
}
builder.append("</p>");
return builder.toString();
}
@Override
public BodyType getBodyType() {
return BodyType.NONE;
}
@Override
public OutputType getOutputType() {
return OutputType.BLOCK;
}
}
和 atlassian-plugin.xml:
<atlassian-plugin key="${atlassian.plugin.key}" name="${project.name}" plugins-version="2">
<plugin-info>
<description>${project.description}</description>
<version>${project.version}</version>
<vendor name="${project.organization.name}" url="${project.organization.url}" />
</plugin-info>
<xhtml-macro name="company-confluence-macro" class="com.company.confluence.plugin.MyConfluenceMacro" key="my-macro">
<parameters/>
</xhtml-macro>
<!-- add our i18n resource -->
<resource type="i18n" name="i18n" location="company-confluence-macro"/>
</atlassian-plugin>
教程已弃用,如果有人在创建 confluence 宏时遇到问题:
-atlas-create-confluence-macro
-delete test folder
-atlas-mvn eclispe:eclipse
-import project to your eclipse workspace
-create macro class like in tutorial.(this should be your only class on this stage, delete others)
-add this to your atlassian-plugin.xml behind i18n resource line.
(modify "class=" variable for your project)
<xhtml-macro name="PLUGIN" class="com.project.xxx.mymacro" key="mymacro" icon="/download/resources/${project.groupId}.${project.artifactId}/images/pluginIcon.png">
<category name="external-content"/>
<parameters>
<parameter name="link" type="string" required="true"/>
</parameters>
<description>Inserts a calendar for the week into the current page</description>
</xhtml-macro>
-atlas-package
-atlas-run
-atlas-install-plugin
这对我在 atlas-6.2.6 上有用,我知道这个问题很老了,但仍然存在问题。许多答案不明确或已弃用...