V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liduanjie
V2EX  ›  Java

log4j 没有主类的问题

  •  
  •   liduanjie · 2021-03-09 12:30:54 +08:00 · 2054 次点击
    这是一个创建于 1380 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大佬们求助一下:
    我编译好了 jar 文件,但是执行的时候说 log4j 没有主类。。我没有用 eclipse,怎么办。。。
    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger
    运行的命令是这个:
    java -cp my-app-1.0-SNAPSHOT.jar com.mycompany.app.App
    11 条回复    2021-03-09 19:21:21 +08:00
    2020beBetter
        1
    2020beBetter  
       2021-03-09 12:41:49 +08:00
    你的 my-app-1.0-SNAPSHOT.jar 包里面没有 log4j 的依赖 贴你的 pom
    liduanjie
        2
    liduanjie  
    OP
       2021-03-09 12:48:36 +08:00
    pom 给你们看下。。

    <?xml version="1.0" encoding="UTF-8"?>

    <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>com.mycompany.app</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0-SNAPSHOT</version>

    <name>my-app</name>
    <!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>

    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
    </properties>

    <dependencies>
    <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.4.29.Final</version>
    </dependency>
    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.6.1</version>
    </dependency>
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.5</version>
    </dependency>
    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-nop</artifactId>
    <version>1.6.4</version>
    </dependency>

    <dependency>
    <groupId>javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.11.0.GA</version>
    </dependency>
    <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.16</version>
    <!--<scope>system</scope>
    <systemPath>${project.basedir}/target/dependency/log4j-1.2.16.jar</systemPath>-->
    </dependency>
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
    </dependency>
    </dependencies>

    <build>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
    <plugins>
    <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->

    <!--add-->
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.4</version>
    <executions>
    <execution>
    <id>copy-dependencies</id>
    <phase>package</phase>
    <goals><goal>copy-dependencies</goal></goals>
    </execution>
    </executions>
    </plugin>

    <!--add end-->

    <plugin>
    <artifactId>maven-clean-plugin</artifactId>
    <version>3.1.0</version>
    </plugin>
    <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
    <plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.0.2</version>
    </plugin>
    <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    </plugin>
    <plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.1</version>
    <configuration>
    <skip>true</skip>
    </configuration>
    </plugin>
    <plugin>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.0.2</version>
    <!--add start-->

    <!--add end-->
    </plugin>
    <plugin>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.5.2</version>
    </plugin>
    <plugin>
    <artifactId>maven-deploy-plugin</artifactId>
    <version>2.8.2</version>
    </plugin>
    <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
    <plugin>
    <artifactId>maven-site-plugin</artifactId>
    <version>3.7.1</version>
    </plugin>
    <plugin>
    <artifactId>maven-project-info-reports-plugin</artifactId>
    <version>3.0.0</version>
    </plugin>
    </plugins>
    </pluginManagement>
    </build>
    </project>
    2020beBetter
        3
    2020beBetter  
       2021-03-09 12:51:38 +08:00
    target 下面 clean 过后就没有了阿。 你这个路径有问题
    liduanjie
        4
    liduanjie  
    OP
       2021-03-09 12:51:44 +08:00
    @2020beBetter 大佬看下
    liduanjie
        5
    liduanjie  
    OP
       2021-03-09 12:56:31 +08:00
    @2020beBetter 有的,我 build 出来的东西都在 target 目录。包括 depdency 都有。
    liduanjie
        6
    liduanjie  
    OP
       2021-03-09 12:58:10 +08:00
    ├─classes
    │ ├─com
    │ │ ├─HibernateUtil
    │ │ └─mycompany
    │ │ └─app
    │ └─hibernate
    │ └─mappings
    ├─dependency
    ├─generated-sources
    │ └─annotations
    ├─generated-test-sources
    │ └─test-annotations
    ├─maven-archiver
    ├─maven-status
    │ └─maven-compiler-plugin
    │ ├─compile
    │ │ └─default-compile
    │ └─testCompile
    │ └─default-testCompile
    ├─surefire-reports
    └─test-classes
    └─com
    └─mycompany
    └─app
    liduanjie
        7
    liduanjie  
    OP
       2021-03-09 13:13:38 +08:00
    @2020beBetter 不加 log4j 就没问题,可以打出 hello world 。但是加了 log4j 就会出现没有主类的问题。
    lululau
        8
    lululau  
       2021-03-09 13:32:47 +08:00 via iPhone
    哪里写的没有主类了。。。NoClassDefFound 十有八九是包冲突
    liduanjie
        9
    liduanjie  
    OP
       2021-03-09 13:46:58 +08:00
    @lululau 不知怎么解决。。
    coolcfan
        10
    coolcfan  
       2021-03-09 15:01:48 +08:00
    因为你没有使用把所有依赖打包到你的 jar 里的 Maven 插件,而只是把依赖复制到了 target 里,所以打包出来的 jar 应该只包含你自己写的 class 。
    所以要运行的时候,应该需要将依赖的 jar 加入到 classpath 里:
    java -cp my-app-version.jar:path/to/log4j.jar:path/to/other-dependency.jar com.mycompany.app.App
    liduanjie
        11
    liduanjie  
    OP
       2021-03-09 19:21:21 +08:00
    @coolcfan 在 windows 应该怎么写?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5797 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 01:45 · PVG 09:45 · LAX 17:45 · JFK 20:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.