在windows上使用AscidActor maven插件时强制在JRuby中编码

在windows上使用AscidActor maven插件时强制在JRuby中编码,jruby,maven-plugin,asciidoctor,Jruby,Maven Plugin,Asciidoctor,在Windows上使用AscidActor maven插件,我们在执行目标进程AscidOcs时遇到编码不兼容错误 我们尝试了0.1.4版本的插件和master的最新快照 org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.asciidoctor:asciidoctor-maven-plugin:1.5.0-SNAPSHOT:process-asciidoc (default-cli

在Windows上使用AscidActor maven插件,我们在执行目标进程AscidOcs时遇到编码不兼容错误

我们尝试了0.1.4版本的插件和master的最新快照

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.asciidoctor:asciidoctor-maven-plugin:1.5.0-SNAPSHOT:process-asciidoc (default-cli) on project lgtdev-doc: Execution default-cli of goal org.asciido
ctor:asciidoctor-maven-plugin:1.5.0-SNAPSHOT:process-asciidoc failed: (Encoding::CompatibilityError) incompatible character encodings: CP850 and UTF-8
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:224)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:317)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:152)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:555)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:158)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution default-cli of goal org.asciidoctor:asciidoctor-maven-plugin:1.5.0-SNAPSHOT:process-asciidoc failed: (Encoding::CompatibilityError) incompatible character enco
dings: CP850 and UTF-8
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:115)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
        ... 19 more
Caused by: org.jruby.exceptions.RaiseException: (Encoding::CompatibilityError) incompatible character encodings: CP850 and UTF-8
        at org.jruby.RubyString.concat(org/jruby/RubyString.java:2636)
        at RUBY.result((erb):58)
        at org.jruby.RubyKernel.eval(org/jruby/RubyKernel.java:1093)
        at RUBY.result(jar:file:/C:/Users/AUX7010/.m2/repository/org/jruby/jruby-complete/1.7.4/jruby-complete-1.7.4.jar!/META-INF/jruby.home/lib/ruby/1.9/erb.rb:838)
        at RUBY.render(jar:file:C:/Users/AUX7010/.m2/repository/org/asciidoctor/asciidoctor-java-integration/0.1.4/asciidoctor-java-integration-0.1.4.jar!/gems/asciidoctor-0.1.4/lib/asciidoctor/backends/base_template.rb:55)
        at RUBY.render(jar:file:C:/Users/AUX7010/.m2/repository/org/asciidoctor/asciidoctor-java-integration/0.1.4/asciidoctor-java-integration-0.1.4.jar!/gems/asciidoctor-0.1.4/lib/asciidoctor/renderer.rb:137)
        at RUBY.render(jar:file:C:/Users/AUX7010/.m2/repository/org/asciidoctor/asciidoctor-java-integration/0.1.4/asciidoctor-java-integration-0.1.4.jar!/gems/asciidoctor-0.1.4/lib/asciidoctor/document.rb:769)
        at RUBY.render(jar:file:C:/Users/AUX7010/.m2/repository/org/asciidoctor/asciidoctor-java-integration/0.1.4/asciidoctor-java-integration-0.1.4.jar!/gems/asciidoctor-0.1.4/lib/asciidoctor.rb:915)
        at RUBY.render_file(jar:file:C:/Users/AUX7010/.m2/repository/org/asciidoctor/asciidoctor-java-integration/0.1.4/asciidoctor-java-integration-0.1.4.jar!/gems/asciidoctor-0.1.4/lib/asciidoctor.rb:993)
        at RUBY.render_file(<script>:51)
        at org.jruby.gen.InterfaceImpl1306937631.render_file(org/jruby/gen/InterfaceImpl1306937631.gen:13)
org.apache.maven.lifecycle.LifecycleExecutionException:无法执行目标org.ascidoctor:ascidoctor maven插件:1.5.0-SNAPSHOT:在项目lgtdev上处理ascidoc(默认cli)doc:执行目标org.ascido的默认cli
ctor:asciidoctor maven插件:1.5.0-SNAPSHOT:process asciidoc失败:(编码::CompatibilityError)不兼容的字符编码:CP850和UTF-8
位于org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:224)
位于org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
位于org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
位于org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
位于org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
位于org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
位于org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
在org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:317)
位于org.apache.maven.DefaultMaven.execute(DefaultMaven.java:152)
位于org.apache.maven.cli.MavenCli.execute(MavenCli.java:555)
位于org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)
位于org.apache.maven.cli.MavenCli.main(MavenCli.java:158)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:606)
位于org.codehaus.plexus.classworlds.launcher.launcher.launchEnhanced(launcher.java:289)
位于org.codehaus.plexus.classworlds.launcher.launcher.launch(launcher.java:229)
位于org.codehaus.plexus.classworlds.launcher.launcher.mainWithExitCode(launcher.java:415)
位于org.codehaus.plexus.classworlds.launcher.launcher.main(launcher.java:356)
原因:org.apache.maven.plugin.PluginExecutionException:目标组织的执行默认cli.ascidoctor:ascidoctor maven插件:1.5.0-SNAPSHOT:进程ascidoc失败:(编码::兼容性错误)不兼容字符编码
编码:CP850和UTF-8
位于org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:115)
位于org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
... 还有19个
原因:org.jruby.exceptions.RaiseException:(Encoding::CompatibilityError)不兼容的字符编码:CP850和UTF-8
位于org.jruby.RubyString.concat(org/jruby/RubyString.java:2636)
结果((erb):58)
位于org.jruby.RubyKernel.eval(org/jruby/RubyKernel.java:1093)
在RUBY.result(jar:file:/C:/Users/aux710/.m2/repository/org/jruby/jruby complete/1.7.4/jruby-complete-1.7.4.jar!/META-INF/jruby.home/lib/RUBY/1.9/erb.rb:838)
在RUBY.render(jar:file:C:/Users/aux710/.m2/repository/org/ascidoctor/ascidoctor-java-integration/0.1.4/ascidoctor-java-integration-0.1.4.jar!/gems/ascidoctor-0.1.4/lib/ascidoctor/backends/base_-template.rb:55)
在RUBY.render(jar:file:C:/Users/aux710/.m2/repository/org/ascidoctor/ascidoctor-java-integration/0.1.4/ascidoctor-java-integration-0.1.4.jar!/gems/ascidoctor-0.1.4/lib/ascidoctor/render.rb:137)
在RUBY.render(jar:file:C:/Users/aux710/.m2/repository/org/ascidoctor/ascidoctor-java-integration/0.1.4/ascidoctor-java-integration-0.1.4.jar!/gems/ascidoctor-0.1.4/lib/ascidoctor/document.rb:769)
在RUBY.render(jar:file:C:/Users/aux710/.m2/repository/org/ascidoctor/ascidoctor-java-integration/0.1.4/ascidoctor-java-integration-0.1.4.jar!/gems/ascidoctor-0.1.4/lib/ascidoctor.rb:915)
在RUBY.render_文件中(jar:file:C:/Users/aux710/.m2/repository/org/asciidoctor/asciidoctor-java-integration/0.1.4/asciidoctor-java-integration-0.1.4.jar!/gems/asciidoctor-0.1.4/lib/asciidoctor.rb:993)
在RUBY.render_文件中(:51)
位于org.jruby.gen.interfaceeimpl1306937631.render_文件(org/jruby/gen/interfaceeimpl1306937631.gen:13)
当将cruby与AscidActor gem一起使用时,我们没有得到这个错误,因此它认为问题在于jruby执行环境

在Mac上,我们通过设置JAVA_TOOL_OPTIONS=“-DFile=encoding.UTF-8”解决了相同的错误,但在Windows上这没有效果


我们如何强迫jruby使用UTF-8?

我们通过在asciidoctor java集成jar中编辑asciidoctor源代码,强制gems/asciidoctor-0.1.4/lib/asciidoctor.rb中的Encoding.default_external=Encoding::UTF_8,解决了这个问题。虽然不是一个优雅的解决方案,但它可以工作