Maven Java应用程序在从命令行而不是从Netbeans IDE中运行时崩溃

Maven Java应用程序在从命令行而不是从Netbeans IDE中运行时崩溃,maven,log4j,onejar,Maven,Log4j,Onejar,编辑:问题重写: 我创建了一个新的最小示例来说明我的问题。首先,这里是一个简单类App.java的源代码: package testlog4j.testlog4j; import java.io.*; import java.net.*; import org.apache.log4j.*; import org.apache.log4j.xml.*; public class App { static Logger logger = Logger.getLogger(App.cl

编辑:问题重写:

我创建了一个新的最小示例来说明我的问题。首先,这里是一个简单类App.java的源代码:

package testlog4j.testlog4j;

import java.io.*;
import java.net.*;
import org.apache.log4j.*;
import org.apache.log4j.xml.*;

public class App 
{
    static Logger logger = Logger.getLogger(App.class);
    URL url = getClass().getClassLoader().getResource("log4j.xml");

    public static void main( String[] args )
    {
        App app = new App();
        DOMConfigurator.configure(app.url);
        System.out.println( "Hello World!" );
        System.out.println("Resource(.): " + App.class.getResource("."));
        System.out.println("Resource(): " + App.class.getResource(""));
        System.out.println("URL :" + app.url.toString());

        logger.info("INFO");
    }
}
其次,这里是项目的pom.xml文件

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>testlog4j</groupId>
<artifactId>testlog4j</artifactId>
<version>1.0</version>
<packaging>jar</packaging>

<name>testlog4j</name>
<url>http://maven.apache.org</url>

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

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>testlog4j.testlog4j.App</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

    <plugin>
        <groupId>org.dstovall</groupId>
        <artifactId>onejar-maven-plugin</artifactId>
        <version>1.4.4</version>
        <executions>
            <execution>
                <configuration>
                    <mainClass>testlog4j.testlog4j.App</mainClass>
                    <attachToBuild>true</attachToBuild>
                </configuration>
                <goals>
                    <goal>one-jar</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

    </plugins>
</build>


<dependencies>
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>3.8.1</version>
  <scope>test</scope>
</dependency>

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>        
    <version>1.2.14</version>
</dependency>   
</dependencies>

<pluginRepositories>
    <pluginRepository>
        <id>onejar-maven-plugin.googlecode.com</id>
        <url>http://onejar-maven-plugin.googlecode.com/svn/mavenrepo</url>
    </pluginRepository>
</pluginRepositories>
</project>

4.0.0
testlog4j
testlog4j
1
罐子
testlog4j
http://maven.apache.org
UTF-8
org.apache.maven.plugins
maven jar插件
真的
testlog4j.testlog4j.App
org.dstowall
onejar maven插件
1.4.4
testlog4j.testlog4j.App
真的
一罐
朱尼特
朱尼特
3.8.1
测试
log4j
log4j
1.2.14
onejar-maven-plugin.googlecode.com
http://onejar-maven-plugin.googlecode.com/svn/mavenrepo
第三,我的log4j.xml位于src/main/resources文件夹下:

<?xml version="1.0" encoding="iso-8859-1"?>
<!--<!DOCTYPE log4j:configuration PUBLIC-->
<!--"-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">-->
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration debug="true">

<appender name="default.console" class="org.apache.log4j.ConsoleAppender">
    <param name="target" value="System.out" />
    <param name="threshold" value="debug" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{ISO8601} %-5p [%c{1}] - %m%n" />
    </layout>
</appender>
<appender name="main.file" class="org.apache.log4j.RollingFileAppender">
    <param name="file" value="log/main.log" />
    <param name="MaxFileSize" value="2MB" />
    <param name="append" value="true" />
    <param name="threshold" value="debug" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{ISO8601} %-5p [%c{1}] - %m%n" />
    </layout>
</appender>

 <logger name="testlog4j.testlog4j.App" additivity="false">
    <level value="debug" />
    <appender-ref ref="main.file" />
    <appender-ref ref="default.console" />
</logger>


<root>
    <priority value="debug" />
    <appender-ref ref="default.console" />
    <appender-ref ref="main.file" />
</root>

好的,构建应用程序并在Netbeans中运行完全符合预期,可以注销到控制台和日志目录下的文件

但是,从命令行(普通jar和oneJar)运行并不能像下面所示那样工作:

java-jartestlog4j-1.0.jar

线程“main”java.lang.NoClassDefFoundError中的异常:org/apache/log4j/Logger 在testlog4j.testlog4j.App.(App.java:17) 原因:java.lang.ClassNotFoundException:org.apache.log4j.Logger 在java.net.URLClassLoader$1.run(URLClassLoader.java:366) 在java.net.URLClassLoader$1.run(URLClassLoader.java:355) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.net.URLClassLoader.findClass(URLClassLoader.java:354) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:425) 位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:358) ... 还有一个 java-jartestlog4j.1.0.one-jar.jar

log4j:ERROR无法解析url[jar:file:/testlog4j-1.0.one jar.jar!/main/testlog4j-1.0.jar!/log4j.xml]。
java.io.FileNotFoundException:/testlog4j-1.0.one-jar.jar(没有这样的文件或目录)
位于java.util.zip.ZipFile.open(本机方法)
位于java.util.zip.ZipFile。(ZipFile.java:215)
位于java.util.zip.ZipFile。(ZipFile.java:145)
位于java.util.jar.JarFile。(JarFile.java:154)
位于java.util.jar.JarFile。(JarFile.java:91)
位于sun.net.www.protocol.jar.URLJarFile.(URLJarFile.java:93)
位于sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:69)
位于sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:84)
位于sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:122)
位于sun.net.www.protocol.jar.JarURLConnection.getInputStream(JarURLConnection.java:150)
在com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:613)
位于com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:189)
位于com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:812)
位于com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
位于com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
位于com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)
位于com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:347)
位于javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
位于org.apache.log4j.xml.DOMConfigurator$2.parse(DOMConfigurator.java:612)
位于org.apache.log4j.xml.domconfigure(DOMConfigurator.java:711)
位于org.apache.log4j.xml.domconfigure(DOMConfigurator.java:618)
在org.apache.log4j.helpers.OptionConverter.selectAndConfigure上(OptionConverter.java:470)
登录org.apache.log4j.LogManager(LogManager.java:122)
位于org.apache.log4j.Logger.getLogger(Logger.java:117)
在testlog4j.testlog4j.App.(App.java:17)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:606)
位于com.simontuffs.onejar.Boot.run(Boot.java:340)
位于com.simontuffs.onejar.Boot.main(Boot.java:166)
log4j:错误无法解析url[jar:file:/testlog4j-1.0.one jar.jar!/main/testlog4j-1.0.jar!/log4j.xml]。
java.io.FileNotFoundException:/testlog4j-1.0.one-jar.jar(没有这样的文件或目录)
位于java.util.zip.ZipFile.open(本机方法)
位于java.util.zip.ZipFile。(ZipFile.java:215)
位于java.util.zip.ZipFile。(ZipFile.java:145)
位于java.util.jar.JarFile。(JarFile.java:154)
位于java.util.jar.JarFile。(JarFile.java:91)
位于sun.net.www.protocol.jar.URLJarFile.(URLJarFile.java:93)
位于sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:69)
位于sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:84)
位于sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:122)
位于sun.net.www.protocol.jar.JarURLConnection.getInputStream(JarURLConnection.java:150)
在com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:613)
位于com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:189)
位于com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML1
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger
    at testlog4j.testlog4j.App.<clinit>(App.java:17)
    Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger
    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
log4j:ERROR Could not parse url [jar:file:/testlog4j-1.0.one-jar.jar!/main/testlog4j-1.0.jar!/log4j.xml]. 
java.io.FileNotFoundException: /testlog4j-1.0.one-jar.jar (No such file or directory)
    at java.util.zip.ZipFile.open(Native Method)
    at java.util.zip.ZipFile.<init>(ZipFile.java:215)
    at java.util.zip.ZipFile.<init>(ZipFile.java:145)
    at java.util.jar.JarFile.<init>(JarFile.java:154)
    at java.util.jar.JarFile.<init>(JarFile.java:91)
    at sun.net.www.protocol.jar.URLJarFile.<init>(URLJarFile.java:93)
    at sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:69)
    at sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:84)
    at sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:122)
    at sun.net.www.protocol.jar.JarURLConnection.getInputStream(JarURLConnection.java:150)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:613)
    at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:189)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:812)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:347)
    at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
    at org.apache.log4j.xml.DOMConfigurator$2.parse(DOMConfigurator.java:612)
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:711)
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:618)
    at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:470)
    at org.apache.log4j.LogManager.<clinit>(LogManager.java:122)
    at org.apache.log4j.Logger.getLogger(Logger.java:117)
    at testlog4j.testlog4j.App.<clinit>(App.java:17)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.simontuffs.onejar.Boot.run(Boot.java:340)
    at com.simontuffs.onejar.Boot.main(Boot.java:166)
log4j:ERROR Could not parse url [jar:file:/testlog4j-1.0.one-jar.jar!/main/testlog4j-1.0.jar!/log4j.xml].
java.io.FileNotFoundException: /testlog4j-1.0.one-jar.jar (No such file or directory)
    at java.util.zip.ZipFile.open(Native Method)
    at java.util.zip.ZipFile.<init>(ZipFile.java:215)
    at java.util.zip.ZipFile.<init>(ZipFile.java:145)
    at java.util.jar.JarFile.<init>(JarFile.java:154)
    at java.util.jar.JarFile.<init>(JarFile.java:91)
    at sun.net.www.protocol.jar.URLJarFile.<init>(URLJarFile.java:93)
    at sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:69)
    at sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:84)
    at sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:122)
    at sun.net.www.protocol.jar.JarURLConnection.getInputStream(JarURLConnection.java:150)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:613)
    at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:189)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:812)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:347)
    at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:177)
    at org.apache.log4j.xml.DOMConfigurator$2.parse(DOMConfigurator.java:612)
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:711)
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:618)
    at org.apache.log4j.xml.DOMConfigurator.configure(DOMConfigurator.java:743)
    at testlog4j.testlog4j.App.main(App.java:23)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.simontuffs.onejar.Boot.run(Boot.java:340)
    at com.simontuffs.onejar.Boot.main(Boot.java:166)

Hello World!
Resource(.): null
Resource(): jar:file:/testlog4j-1.0.one-jar.jar!/main/testlog4j-1.0.jar!/testlog4j/testlog4j/
URL :jar:file:/testlog4j-1.0.one-jar.jar!/main/testlog4j-1.0.jar!/log4j.xml
log4j:WARN No appenders could be found for logger (testlog4j.testlog4j.App).
log4j:WARN Please initialize the log4j system properly.
https://github.com/mtleis/simpleLog4jMaven