向gradle项目添加log4j会破坏jar

时间:2020-03-10 18:13:10

标签: java gradle log4j

build.gradle

apply plugin: 'java'

repositories {
    maven {
        url "https://repo1.maven.org/maven2"
    }
}

dependencies {
    compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.13.1'
    compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.13.1'
}

jar {
    manifest {
        attributes 'Main-Class': 'server.Server'
    }
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } 
}

项目源代码树:

multi-threaded-server:
 - build.gradle
 - log4j.properties
 - src
  - main
   - java
    - server
     - Server.java

代码段(如果需要添加更多代码,请告诉我):

package server;

import java.net.ServerSocket;
import java.net.Socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import org.apache.log4j.Logger;

public class Server {
    private final static Logger log = Logger.getLogger(Server.class.getName());
    private static int HOST_PORT = 80;

    public static void main(String[] args) {
        String clientInput;
        ServerSocket serverSocket;
        Socket client;
        try {
            serverSocket = new ServerSocket(HOST_PORT);
        } catch(IOException e) {
            throw new RuntimeException(
                "Error while creating connection on " + HOST_PORT + ": " + e.getMessage()
            );
        }

        log.info("Server started at port " + HOST_PORT);    
        *
        *
        *

log4j.properties:

log4j.rootLogger=DEBUG, file

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=/home/mgalesic/multi-threaded-server/log.out
log4j.appender.file.Append=true
log4j.appender.file.MaxFileSize=5KB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.conversionPattern=%m%n

当我将log4j api和core作为依赖项时,运行gradle build后会得到此信息:

[multi-threaded-server] sudo java -jar build/libs/multi-threaded-server.jar                                                                                                  
Error: Could not find or load main class server.Server

在不依赖于log4j的情况下,并且在运行gradle build之后,服务器会启动。

我看到了Gradle - FatJar - Could not find or load main class,这似乎是一个类似的问题。

浏览第一个答案https://stackoverflow.com/a/51456080/1456621

    运行gradle build后,当我解压缩创建的jar文件时,
  • 在META-INF中找不到任何内容。
  • 在我的gradle版本中添加排除项无效

第二个答案https://stackoverflow.com/a/51455886/1456621

  • log4j-core-2.13.1.jarlog4j-api-2.13.1.jar上运行jarsigner -verify会产生jar is unsigned,尽管我不知道从Maven得到的罐子是肥的还是类似于gra的拉动。

我希望我缺少一些简单的东西来使log4j工作。

0 个答案:

没有答案
相关问题