【问题标题】:Getting started with UNO and Java with Open/LibreOffice使用 Open/LibreOffice 开始使用 UNO 和 Java
【发布时间】:2013-03-08 08:03:04
【问题描述】:

我刚开始使用 LibreOffice 的 4.0.1 UNO SDK 开发一个 Java 项目,aaaand...我几乎一开始就被卡住了。我认为如果我使用 OpenOffice.org 而不是 LibreOffice,也可以应用同样的方法,因此我们不胜感激。

我正在使用 Eclipse Juno 4.2,并创建了一个类似“Hello World”的项目。我将/program 目录添加到类路径(添加为外部类文件夹),并在这行代码的开头

XComponentContext ctx = Bootstrap.bootstrap();

引发UnsatisfiedLinkError 异常,并带有以下堆栈跟踪:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no jpipe in java.library.path
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.loadLibrary0(Unknown Source)
    at java.lang.System.loadLibrary(Unknown Source)
    at com.sun.star.lib.util.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:50)
    at com.sun.star.lib.connections.pipe.PipeConnection.<clinit>(PipeConnection.java:48)
    at com.sun.star.lib.connections.pipe.pipeConnector.connect(pipeConnector.java:110)
    at com.sun.star.comp.connections.Connector.connect(Connector.java:114)
    at com.sun.star.comp.urlresolver.UrlResolver$_UrlResolver.resolve(UrlResolver.java:108)
    at com.sun.star.comp.helper.Bootstrap.bootstrap(Bootstrap.java:301)
    at xx.test.unotest.UnoTest.main(UnoTest.java:16)

指令周围甚至还有一个try/catch,但它没有被触发。

我找不到关于开始使用 UNO 的合适文档,所以我不知道出了什么问题。 SDK安装完毕,环境变量配置完毕。

我错过了什么吗?

编辑:我使用的是 Windows 7 64 位。也许这与问题有关。

【问题讨论】:

  • 尝试以下连接:-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager From oooforum.org/forum/viewtopic.phtml?t=27578
  • @zachlatta 遗憾的是,我得到了相同的结果。
  • 你的Java环境变量设置正确吗?
  • @zachlatta 我会说是的,但我不知道哪里可以检查是否有问题。
  • 从同一个论坛主题中阅读,看起来他们在-accept=socket,host=localhost,port=8100;urp; 上取得了成功。让我知道这是否有效。

标签: java eclipse openoffice.org libreoffice uno


【解决方案1】:

好吧,就是这样,在PATH 环境变量中列出的目录中找不到库 jpipe.dll。我必须在其中添加路径 LibreOffice 4.0/URE/bin。

将路径添加到java.library.path 将不起作用。

所以,在安装了一个非常烦人的 SDK 之后,需要一个我不会使用并强迫我安装 MinGW 的 GNU make 工具,以及一个糟糕的 zip 工具这不能简单地找到,因为来自 info-zip.org(api.libreoffice.org 提供的源)的镜像全部关闭,我仍然有这些愚蠢和未记录的问题。

一旦解决了这个问题,64 位的东西实际上是个问题,因为 jpipe.dll 是一个 32 位的库,无法加载,所以我不得不切换到 32 位JDK/JRE 以使其工作。

男人。我可以不用一些用户友好的界面,但这只会让开发人员的生活变得不必要地困难!

这就是为什么开源软件有时很糟糕的原因。

【讨论】:

  • 在 linux 上将/usr/lib/ure/lib 添加到类路径(对于libjpipe.so
  • 测试于:Linux Mint 18.3 Sylvia。添加这个参数可以解决问题:-Djava.library.path="/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib:/usr/lib/libreoffice/program/ "
【解决方案2】:

如果你使用的是 32 位的 libreoffice,那么你需要切换 32 的 jdk 才能工作。否则请下载最新版本的 64 位的 libreoffice

【讨论】:

    【解决方案3】:

    尝试将 libjpipe.so 库链接到项目内的lib 目录:

    ln -s /usr/lib/libreoffice/program/libjpipe.so your_project/lib/
    

    【讨论】:

      【解决方案4】:

      对于 Ubuntu 18.04,我可以通过将 libjpipe.so 添加到此位置文件://usr/lib/jni/libjpipe.so

      来解决此问题

      如果你安装了 libre office,你可以从 /usr/lib/libreoffice/program/libjpipe.so 获取这个文件。

      这应该可以解决问题。

      【讨论】:

        【解决方案5】:

        在 MacOS 中,libpipe 库位于 /Applications/LibreOffice.app/Contents/Frameworks/libjpipe.jnilib。所以你需要像这样运行Java。

        java -cp \
          '.:/Applications/LibreOffice.app/Contents/MacOS/:any-other-jars.jar' \
          -Djava.library.path=/Applications/LibreOffice.app/Contents/Frameworks \
           com.example.YourAppClass
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-03-31
          • 1970-01-01
          • 1970-01-01
          • 2011-04-01
          • 2020-12-19
          • 2018-10-21
          • 1970-01-01
          • 2016-02-14
          相关资源
          最近更新 更多