【问题标题】:Jar Built by IntelliJ not recognizing libraries inside jar由 IntelliJ 构建的 Jar 无法识别 jar 中的库
【发布时间】:2019-09-22 09:40:36
【问题描述】:

在 IntelliJ 中,您可以选择将库(依赖项)放入您正在创建的工件中。我想这样做是因为我拥有的一些库是经过数字签名的,如果我将它们提取到 jar 中,它会导致它无法运行(找不到主要方法)

但是,当我这样做时,我收到一堆异常,说找不到该类。有没有一种特殊的方法我必须配置这个 jar 设置,以便能够在工件中找到 jar?

【问题讨论】:

  • 你为什么不使用 Maven 或 Gradle 而不是使用任何 IDE 呢?它非常简单而且更好。
  • 我正在使用 maven,但是我仍然需要将 jar 提取到我遇到问题的可运行工件中
  • 查看这篇文章。 stackoverflow.com/questions/16222748/…。您必须使用 maven shade 插件创建一个 fat jar 文件。

标签: java intellij-idea jar


【解决方案1】:

放置在另一个 jar 中的 Jar 文件无法使用 IntelliJ IDEA 开箱即用。它需要一个自定义类加载器来处理此类依赖项。您可以将 jars next to the main jar and link them via manifest 或 strip the digital signature from the dependent jars 放入并将其内容解压缩到单个 jar 中。

您的另一个选择是通过 Maven 或 Gradle 插件构建 jar,它们可以更好地处理已签名的 jar。

【讨论】:

    【解决方案2】:
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.6.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>3.2.1</version>
                    <configuration>
                        <filters>
                            <filter>
                                <artifact>*:*</artifact>
                                <excludes>
                                    <exclude>META-INF/*.SF</exclude>
                                    <exclude>META-INF/*.DSA</exclude>
                                    <exclude>META-INF/*.RSA</exclude>
                                </excludes>
                            </filter>
                        </filters>
                    </configuration>
    
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>shade</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>3.0.2</version>
                    <configuration>
                        <archive>
                            <manifest>
                                <addClasspath>true</addClasspath>
                                <mainClass>sample.Main</mainClass>
                            </manifest>
                        </archive>
                    </configuration>
                </plugin>
                <plugin>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <version>2.5.5</version>
                    <configuration>
                        <archive>
                            <manifest>
                                <mainClass>sample.Main</mainClass>
                            </manifest>
                        </archive>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                    </configuration>
                    <executions>
                        <execution>
                            <id>make-assembly</id>
                            <phase>package</phase>
                            <goals>
                                <goal>single</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
    

    之前的 maven 设置为我解决了这个问题。然后我运行 mvn clean package 并且它正在工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多