可以使用maven和javafx在单个jar中部署apache-tika吗?

问题描述 投票:0回答:1

我已经在使用 Maven 的项目构建中使用 IntelliJ、OpenJDK17、JavaFX17 完成了桌面应用程序。

该项目在 IDE 中运行良好,当我尝试在单个 jar 中部署应用程序时,问题就开始了,因为我需要一个从 exe 文件运行的独立应用程序。 我面临的问题和错误是:

  1. A
    ClassNotFoundException
    带有包含 main 方法的启动器类,尽管我检查了 POM 和 manifest.mf,但它和我之前制作的其他应用程序一样没问题。
  2. 其他错误是
    Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes

感谢我正在使用的其他应用程序,我意识到我所尝试的错误与 Apache Tika 使用的 bouncyCastle 库有关:

  1. 在将应用程序编译到单个 Jar 中后,我按照我阅读的说明解压了该 jar 并删除了文件 META-INF/*.SF' 'META-INF/*.RSA' 'META-INF/*DSA这里尝试运行 .jar 时出现“无效签名文件”之后,我运行 Jar,但没有收到 ClassNotFoundException,并且应用程序启动,但 Apache-Tika 无法解析任何类型的文档,因此我可以不能使用此选项。

  2. 按照上一个链接中的其他评论,我尝试在使用 POM 的编译过程中排除这些文件,但我使用的是 javafx-maven-plugin 和 maven-compiler-plugin 而不是 maven-shade-plugin。所以不是和选项。

  3. 我也尝试过使用 jlink 和 moditec 插件编译的其他东西,但我有很多与

    相关的错误
    Error: automatic module cannot be used with jlink:
    

    我无法修复它。

  4. 最后,我使用 IntellIj“库中的 Jar 文件”中的选项创建和工件 -“复制到输出目录并通过清单链接”。在这种情况下,应用程序可以运行并工作,但这只是因为我在计算机中安装了 OpenJDK 17,并从那里运行,但我需要一个自行创建的应用程序并创建 .exe 文件以在 Windows 中执行。问题是,对于 javafx 应用程序,如果我不将所有库包装在一个 jar 中,我将无法创建工作的 exe 文件。

    所以,请问这里有任何天才可以帮助我解决这个问题吗?我已经尝试了一个多月,但我找不到解决方案。

javafx bouncycastle apache-tika launch4j meta-inf
1个回答
0
投票

FWIWI,我创建了这个包含 JavaFX 和 Tika 的 uber jar 文件,并且它运行了。我不知道它是否会帮助你实现你的目标。我根本不使用 Tika,因此没有测试 Tika 功能(其中部分功能可能会或可能不会在提供的单个 jar 配置中工作)。

使用的资源是:

代码不是模块化的。请参阅openjfx 入门部分有关非模块化应用程序和运行时映像的更多说明

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>tika</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>tika</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>21.0.2</version>
        </dependency>

        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-parsers-standard-package</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-parser-html-commons</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-langdetect-optimaize</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-serialization</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-xmp</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-batch</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-emitter-fs</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-async-cli</artifactId>
            <version>2.9.2</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.5.2</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <createDependencyReducedPom>false</createDependencyReducedPom>
                            <artifactSet>
                                <excludes>
                                    <exclude>org.apache.tika:tika-parsers-standard-package:jar:</exclude>
                                </excludes>
                            </artifactSet>
                            <filters>
                                <filter>
                                    <artifact>*:*</artifact>
                                    <excludes>
                                        <exclude>module-info.class</exclude>
                                        <exclude>META-INF/*</exclude>
                                        <exclude>LICENSE.txt</exclude>
                                        <exclude>NOTICE.txt</exclude>
                                        <exclude>CHANGES</exclude>
                                        <exclude>README</exclude>
                                        <exclude>builddef.lst</exclude>
                                        <!--  clutter not needed in jar  -->
                                        <exclude>resources/grib1/nasa/README*.pdf</exclude>
                                        <exclude>resources/grib1/**/readme*.txt</exclude>
                                        <exclude>resources/grib2/**/readme*.txt</exclude>
                                        <!--
                                         TIKA-763: Workaround to avoid including LGPL classes
                                        -->
                                        <exclude>ucar/nc2/iosp/fysat/Fysat*.class</exclude>
                                        <exclude>ucar/nc2/dataset/transform/VOceanSG1*class</exclude>
                                        <exclude>ucar/unidata/geoloc/vertical/OceanSG*.class</exclude>
                                        <!--  https://issues.apache.org/jira/browse/TIKA-3650 -->
                                        <exclude>javax/**/*</exclude>
                                        <!--  no idea why this is packaged as a jar within a jar  -->
                                        <exclude>rome-utils-2.1.0.jar</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                            <transformers>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>org.example.tika.TikaMain</mainClass>
                                </transformer>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
                                    <resource>META-INF/LICENSE</resource>
                                    <file>target/classes/META-INF/LICENSE</file>
                                </transformer>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
                                    <resource>META-INF/NOTICE</resource>
                                    <file>target/classes/META-INF/NOTICE</file>
                                </transformer>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
                                    <resource>META-INF/DEPENDENCIES</resource>
                                    <file>target/classes/META-INF/DEPENDENCIES</file>
                                </transformer>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                    <resource>META-INF/cxf/bus-extensions.txt</resource>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.6.1</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.11.0</version>
                <configuration>
                    <source>21</source>
                    <target>21</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
© www.soinside.com 2019 - 2024. All rights reserved.