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文件时,第二个答案https://stackoverflow.com/a/51455886/1456621,
log4j-core-2.13.1.jar
和log4j-api-2.13.1.jar
上运行jarsigner -verify会产生jar is unsigned
,尽管我不知道从Maven得到的罐子是肥的还是类似于gra的拉动。我希望我缺少一些简单的东西来使log4j工作。