Добавление log4j в jar-файл проекта breaks jar - PullRequest
0 голосов
/ 10 марта 2020

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

Когда у меня есть logij 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 - Не удалось найти или загрузить основной класс , что выглядело как похожая проблема.

Просматривая первый ответ { ссылка }:

  • не смог ничего найти в META-INF, когда я разархивировал созданный файл jar после запуска gradle build.
  • добавление исключений в моей сборке Gradle не сработало

Для второго ответа { ссылка },

  • работает jarsigner -verify на log4j-core-2.13.1.jar и log4j-api-2.13.1.jar дает jar is unsigned, хотя я не знаю, являются ли банки, полученные из Maven , жирными или похожи на то, что потянул бы gradle.

Я надеюсь, что есть что-то простое, что мне не хватает, чтобы заставить log4j работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...