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 работать.