自定义Jar文件不包含其他依赖项或JAR

时间:2014-03-21 07:44:42

标签: java eclipse maven jar

我创建了一个maven java项目,我最终想制作jar文件。让我说我的项目名称是mycustomjar,我的最终jar文件是mycustomjar.jar

mycustomjar项目使用其他一些依赖项或jar文件,比如说log4J

现在当我将mycustomjar.jar文件导入到其他一些java项目时,它会显示log4J类的ClassNotFoundException。

最初,我在pom.xml中使用maven依赖进行此操作,但这不是在jar中导入依赖项, 所以我从pom.xml中删除了依赖项,并将所有必需的jar(例如:log4j-1.2.17.jar)直接导入mycustomjar项目。 即使这样,问题也没有得到保存。

我正在使用STS,在尝试制作mycustomjar.jar时,它有两个选项

(1)导出 - > jar文件

(2)出口 - > runnable jar文件

目前没有任何对我有用。请帮助。

1 个答案:

答案 0 :(得分:1)

解决方案1:

您可以在pom.xml文件中使用maven依赖项插件,然后在类路径中引用依赖项。

在你的pom.xml中

        <plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <phase>install</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/lib</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>

然后当你启动应用程序时,请参考:

java -cp .:lib/*:your_app.jar com.yourpackage.Main

解决方案2:

使用maven程序集插件并构建一个大胖jar,它将所有依赖类包含在一个jar中

            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <finalName>${project.build.finalName}-lib</finalName>
                    <appendAssemblyId>false</appendAssemblyId>
                    <classifier>lib</classifier>
                </configuration>
            </plugin>

从这个大胖罐子里跑出主要的班级。

java -cp your_app.jar com.yourpackage.Main