我正在尝试使用基于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.ImageGraphics2D
提出writeImage
。当我在调试器中单步执行时,ImageConstants.RAW
上的监视具有Unknown 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的问题我看到了#34;引起:ExceptionInInitializerError&#34; - 从那时起,这似乎标志着该课程无法进入。因此依赖项确实存在,但初始化程序抛出异常会导致JRE将其标记为不可用。
进一步编辑:要解决这些问题,可以使用(尽管freehep.org网站上的任何地方都没有提到)知道the project is now hosted on Github以便您可以从那里找到更新的版本。在我的情况下,直接进入最新版本解决了问题。