2014-10-12 104 views
0

我被困在试图实现自定义ParserPlugin到库我写面临pegdown 5.0上的问题(Maven项目,JDK 8):Pegdown定制ParserPlugin绑定失败

CustomPlugin:

public class CustomHeadersParserPlugin extends Parser implements BlockPluginParser { 

public CustomHeadersParserPlugin() {super(HtmlMdProc.MDP_SETTINGS, HtmlMdProc.PROCESSING_TIME_LIMIT, DefaultParseRunnerProvider); 
} 

public CustomHeadersParserPlugin(Integer options, Long maxParsingTimeInMillis) { 
    super(options, maxParsingTimeInMillis, DefaultParseRunnerProvider); 
} 

public CustomHeadersParserPlugin(Integer options, Long maxParsingTimeInMillis, ParseRunnerProvider parseRunnerProvider) { 
    super(options, maxParsingTimeInMillis, parseRunnerProvider); 
} 

public CustomHeadersParserPlugin(Integer options, Long maxParsingTimeInMillis, ParseRunnerProvider parseRunnerProvider, PegDownPlugins plugins) { 
    super(options, maxParsingTimeInMillis, parseRunnerProvider, plugins); 
} 

//************* CUSTOM RULES *************** 
... 

Pegdown用法:

public class HtmlMdProc { 

public static final int MDP_SETTINGS = Extensions.HARDWRAPS | Extensions.AUTOLINKS | Extensions.TABLES | Extensions.FENCED_CODE_BLOCKS; 
public static final long PROCESSING_TIME_LIMIT = 5000l; 
... 
public HtmlMdProc markdown() { 
    PegDownPlugins pdp = PegDownPlugins.builder().withPlugin(CustomHeadersParserPlugin.class).build(); 
    PegDownProcessor mdp = new PegDownProcessor(MDP_SETTINGS, PROCESSING_TIME_LIMIT, pdp); 
    RootNode rn = mdp.parseMarkdown(text.toCharArray()); 
    String result = new CustomMarkdownToHtmlSerializer().toHtml(rn); 
    if (result != null) 
     this.text = result; 
    else 
     logger.debug("Could not process markdown in {} seconds", PROCESSING_TIME_LIMIT/1000); 
    return this; 
} 

测试:

@Test 
public void testmarkdownWithoutCode() { 
    String before = "Simple new line\nTest\n\nTest\nVot"; 
    String expected = "<p>Simple new line<br />Test</p><p>Test<br />Vot</p>".replaceAll("\r", ""); 
    HtmlMdProc textProc = new HtmlMdProc(before); 
    String result = textProc.markdown().text(); 
    assertEquals(expected, result); 
} 

测试Exeption:

java.lang.RuntimeException: Error creating extended parser class: null 
    at org.objectweb.asm.ClassReader.<init>(Unknown Source) 
    at org.objectweb.asm.ClassReader.<init>(Unknown Source) 
    at org.objectweb.asm.ClassReader.<init>(Unknown Source) 
    at org.parboiled.transform.AsmUtils.createClassReader(AsmUtils.java:56) 
    at org.parboiled.transform.ClassNodeInitializer.process(ClassNodeInitializer.java:62) 
    at org.parboiled.transform.ParserTransformer.extendParserClass(ParserTransformer.java:44) 
    at org.parboiled.transform.ParserTransformer.transformParser(ParserTransformer.java:38) 
    at org.parboiled.Parboiled.createParser(Parboiled.java:54) 
    at org.pegdown.plugins.PegDownPlugins$Builder.withPlugin(PegDownPlugins.java:113) 
    at com.myorg.html.services.HtmlMdProc.markdown(HtmlMdProc.java:317) 
    at com.myorg.html.services.HtmlMdProcTest.testmarkdownWithoutCode(HtmlMdProcTest.java:262) 
  1. 我可以以某种方式结合我CustomHeadersParserPlugin避免怪异的思考?
  2. 如果不是,请告诉我如何在pom.xml中设置maven-bundle-plugin,使其与pegdown v 1.4.2协同工作。

我发现问题与讨论Here,但我太新手独自处理Maven插件和思考。

+0

一些提示没有运气,阅读[这](后https://github.com/sirthias/parboiled/issues/69) 我已经从我的库中提取了与Markdown相关的代码,并将其编译为一个新代码,并将其编译为JDK7,除非我不用魔杖来拆分我的库,并且新的ASM似乎支持JDK8。 请告诉我,如何纠正依赖以使用mew asm并避免拆分我的库? – 2014-10-12 14:21:16

回答

0

唯一的解决办法就是等待This Issue被关闭,直到我的事情有一个与Pegdown和Java 8