首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行从maven构建的jar时出现"Java error occurred“消息

执行从maven构建的jar时出现"Java error occurred“消息
EN

Stack Overflow用户
提问于 2015-07-08 11:47:11
回答 3查看 233关注 0票数 1

我正在尝试构建一个可执行的jar。当我通过eclipse执行项目中的代码时,它运行得很好,但从CMD行执行jar时就不行了。看起来类路径有一些问题,但我不确定...I在我的pom文件中是否有以下依赖关系:

代码语言:javascript
复制
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.12</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.12</version>
    <scope>compile</scope>
</dependency>

在pom文件的标签中包含以下maven插件:

代码语言:javascript
复制
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.5</source>
        <target>1.5</target>
    </configuration>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <mainClass>org.swx.nursing.tools.quicklaunch.executor.QuickLaunch</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

然后我使用以下代码构建jar: mvn clean install

当我执行jar时,我看到下面的消息,我不确定为什么:

代码语言:javascript
复制
C:\Workspaces\CCQueryHotkey\quicklaunch\target>java -jar quicklaunch-0.0.1-SNAPSHOT.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
    at org.swx.nursing.tools.quicklaunch.executor.QuickLaunch.<clinit>(QuickLaunch.java:18)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 1 more

我看到SLF4j jars在maven拉入的项目文件夹中。

敬请指教!

谢谢

EN

回答 3

Stack Overflow用户

发布于 2015-07-08 12:40:01

您可以使用shade插件来创建一个可执行的jar。以this link为例

票数 1
EN

Stack Overflow用户

发布于 2015-07-08 12:00:52

您必须将类路径设置为.m2存储库。尝试执行

代码语言:javascript
复制
java -cp "Path to your .m2 repository." -jar quicklaunch-0.0.1-SNAPSHOT.jar
票数 0
EN

Stack Overflow用户

发布于 2015-07-08 13:10:55

您将获得java.lang.NoClassDefFoundError,因为类路径位置的类在运行时不可用。

你可以使用maven汇编插件来解决这个问题。

代码语言:javascript
复制
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>1.5</source>
        <target>1.5</target>
    </configuration>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.2</version>
    <!-- nothing here -->
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2-beta-4</version>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>

            <finalName>test</finalName>
            <appendAssemblyId>false</appendAssemblyId>
            <archive>
                <manifest>
                    <mainClass>org.swx.nursing.tools.quicklaunch.executor.QuickLaunch</mainClass>
                </manifest>
            </archive>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

使用上面给出的配置更新您的pom.xml,然后运行mvn全新安装。然后,cd进入目标目录并重试:

java -jar test.jar

参考 maven assembly plugin

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31283187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档