由IntelliJ构建的Jar无法识别jar中的库

时间:2019-05-03 20:23:27

标签: java intellij-idea jar

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

但是,当我这样做时,我会收到一堆异常,表明找不到该类。我是否必须配置一种特殊的方式来配置此jar设置,以便能够在工件中找到这些jar?

2 个答案:

答案 0 :(得分:0)

放置在另一个jar中的Jar文件无法使用IntelliJ IDEA开箱即用。它需要一个自定义的类加载器来处理这种依赖关系。您可以将jars next to the main jar and link them via manifeststrip the digital signature from the dependent jars放入其中,然后将它们的内容包装到单个罐中。

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

答案 1 :(得分:0)

            <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>

以前的专家已经为我解决了这个问题。然后我运行了mvn clean package,它正在工作。