0

我正在尝试使用基于 Batik 构建的开源工具,当我尝试构建它时遇到了其中一个依赖项的问题。很确定这与类路径和库位置有关,但我不知道发生了什么。

所以我正在使用的项目 (SVG2EMF) 使用的是 FreeHep EMF 驱动程序,而后者又使用了 FreeHep GraphicsIO 项目。因为这三个在我的系统(Ubuntu 14.04)上没有很好地播放,所以我已经下载了所有三个的源代码来尝试解决问题。

一切都正确构建,我可以成功单步执行代码,但是 SVG2EMF 上的单元测试在 EMF 驱动程序从 GraphicsIO 调用某些内容时失败 - 相关代码的相关部分在这里:

import org.freehep.graphicsio.ImageGraphics2D;
import org.freehep.graphicsio.ImageConstants;
// ...snip...

public class AlphaBlend extends EMFTag implements EMFConstants 
{

// ...snip...

public void write(int tagID, EMFOutputStream emf) throws IOException 
   {
        emf.writeRECTL(bounds);
        emf.writeLONG(x);
        emf.writeLONG(y);
        emf.writeLONG(width);
        emf.writeLONG(height);
        dwROP.write(emf);
        emf.writeLONG(xSrc);
        emf.writeLONG(ySrc);
        emf.writeXFORM(transform);
        emf.writeCOLORREF(bkg);
        emf.writeDWORD(usage);
        emf.writeDWORD(size); // bmi follows this record immediately
        emf.writeDWORD(BitmapInfoHeader.size);
        emf.writeDWORD(size + BitmapInfoHeader.size); // bitmap follows bmi

        emf.pushBuffer();

        int encode;
        // plain
        encode = BI_RGB;
        ImageGraphics2D.writeImage(
            (RenderedImage) image,
            ImageConstants.RAW.toLowerCase(),
            ImageGraphics2D.getRAWProperties(bkg, "*BGRA"),
            new NoCloseOutputStream(emf));

        // emf.writeImage(image, bkg, "*BGRA", 1);
        // png
        //  encode = BI_PNG;
        // ImageGraphics2D.writeImage(image, "png", new Properties(), new
        // NoCloseOutputStream(emf));
        // jpg
        // encode = BI_JPEG;
        // ImageGraphics2D.writeImage(image, "jpg", new Properties(), new
        // NoCloseOutputStream(emf));
        int length = emf.popBuffer();

        emf.writeDWORD(length);
        emf.writeLONG(image.getWidth());
        emf.writeLONG(image.getHeight());

        BitmapInfoHeader header = new BitmapInfoHeader(image.getWidth(), image
                .getHeight(), 32, encode, length, 0, 0, 0, 0);
        bmi = new BitmapInfo(header);
        bmi.write(emf);

        emf.append();
    }

这会在该调用上引发NoClassDefFoundError特别相关的。当我在调试器中单步执行时,即使应用程序非常愉快地使用这些引用构建,监视的价值也是如此。任何引用的行为方式完全相同。org.freehep.graphicsio.ImageGraphics2DwriteImageImageConstants.RAWUnknown type "org.freehep.graphicsio.ImageConstants"ImageGraphics2D

SVG2EMF 中的依赖项pom.xml如下所示:

<dependencies>
  <!-- some other dependencies -->
        <dependency>    
           <groupId>org.freehep</groupId>
           <artifactId>freehep-graphicsio-emf</artifactId>
           <version>2.1.1</version>
       </dependency>
</dependencies>

FreeHEP EMF 驱动程序的依赖关系如下所示:

 <dependencies>
  <!-- necessary because transitive deps seem to go above inhertied deps -->
      <dependency>
        <groupId>org.freehep</groupId>
        <artifactId>freehep-util</artifactId>
        <version>2.0.2</version>
      </dependency>
    <dependency>
      <groupId>org.freehep</groupId>
      <artifactId>freehep-graphicsio</artifactId>
      <version>2.1.1</version>
    </dependency>
    <!-- Other dependencies -->
 </dependencies>

任何人都可以阐明这里实际发生的事情或我需要做什么才能使其正常工作吗?

编辑:我想我已经找到了问题出在 StackTrace 的地方,我看到一个“由:ExceptionInInitializerError 引起” - 从那时起,这似乎将该类标记为不可访问。所以依赖确实存在,但是初始化程序抛出了一个异常,导致 JRE 将其标记为不可用。

进一步编辑:为了解决这些问题,知道该项目现在托管在 Github上会很有用(尽管在 freehep.org 网站上的任何地方都没有提及),因此您可以从那里找到更新的版本。就我而言,直接使用最新版本解决了这个问题。

4

0 回答 0