当前位置: 首页 > 知识库问答 >
问题:

将FopFactoryBuilder BasURI设置为jar类路径

利海阳
2023-03-14

我正在将Apache FOP 1.0项目升级到Apache FOP 2.1。在这个项目中,所有必要的文件都打包在jar文件中。

我添加了新的FopFactoryBuilder以生成FopFactory

    FopFactoryBuilder builder = new FopFactoryBuilder(new File(".").toURI());
    builder = builder.setConfiguration(config);
    fopFactory = builder.build();

但是我所有的资源都是从文件系统上的相对路径加载的,而不是从 jar 加载的。如何将 baseURI 设置为 jar 的类路径?

谢谢。

共有2个答案

步嘉德
2023-03-14

通过将URL指定为类路径URL,如下所示:

<fo:external-graphic src="classpath:fop/images/myimage.jpg"/>

在这个例子中,文件是资源包fop.images中的一个资源,但是实际的文件后来被打包到JAR中完全不同的地方,但是JAR是类路径的一部分,所以上面的查找是有效的。

危卜鹰
2023-03-14

我们还使用了 FOP 2.1,并希望实现在 jars-classpath 中找到图像。我们经过测试和使用的解决方案如下:

创建自己的ResourceResolver

import java.io.IOException;
import java.io.OutputStream;
import java.net.URI;
import java.net.URL;

import org.apache.fop.apps.io.ResourceResolverFactory;
import org.apache.xmlgraphics.io.Resource;
import org.apache.xmlgraphics.io.ResourceResolver;

public class ClasspathResolverURIAdapter implements ResourceResolver {

  private final ResourceResolver wrapped;


  public ClasspathResolverURIAdapter() {
    this.wrapped = ResourceResolverFactory.createDefaultResourceResolver();
  }


  @Override
  public Resource getResource(URI uri) throws IOException {
    if (uri.getScheme().equals("classpath")) {
      URL url = getClass().getClassLoader().getResource(uri.getSchemeSpecificPart());

      return new Resource(url.openStream());
    } else {
      return wrapped.getResource(uri);
    }
  }

  @Override
  public OutputStream getOutputStream(URI uri) throws IOException {
    return wrapped.getOutputStream(uri);
  }

}
FopFactoryBuilder fopBuilder = new FopFactoryBuilder(new File(".").toURI(), new ClasspathResolverURIAdapter());
<fo:external-graphic src="classpath:com/mypackage/image.jpg" />

因为您使用我们自己的解析器,所以可以进行任何您想要的查找。

 类似资料:
  • 我试图将外部jar设置为hadoop类路径,但目前还没有成功。 我可以看到上面的HADOOP_CLASSPATH已经被hadoop接收 $hadoop类路径 /etc/hadoop/conf:/usr/lib/hadoop/lib/://usr/lib/hadoop/.//:/home/tom/workspace/libs/opencsv-2.3.jar://usr/lib/hadoop-hdfs

  • 问题内容: 我有一个独立的Java项目。我已经执行了Maven全新安装。现在,我通过命令提示符进入target \ classes文件夹,并在classpath中设置所有必需的文件。现在我执行主类。结果正在显示。 现在,我通过命令提示符移回目标文件夹,并尝试执行jar文件(jar文件具有在其中定义了主类的清单文件)。 现在,我得到以下异常。我也从上面的语句中删除了classpath属性,但仍然遇到

  • 我有一个文件夹和包结构,如下所示 null null 致以最诚挚的问候 编辑:使用windows可能有不同的语法

  • 换句话说,现在我的单元测试的类路径设置为:。 相反,我希望将此类路径设置为:。 我曾尝试手动添加和删除依赖项类,如下所示:http://maven.apache.org/plugins/maven-surefire-plugin/examples/configuring-classpath.html,但到目前为止还不起作用。

  • 我想解决我的类问题,你能告诉我怎么做吗? null

  • 我用eclipse创建了一个maven项目,并用下面的命令制作了jar文件 打包 当我尝试知道我的mvn项目配置是真的还是不是这个命令 mvn exec:Java-D exec . main class = " giraph . hello world . app " 我得到这个错误: 在helloworld项目上执行目标 org.codehaus.mojo: exec-maven-plugin: