我写我的代码后Netty的留档,然后我执行:
mvn package
它构建成功。然后我跑:
java -jar target/netty-listener-0.0.1-SNAPSHOT.jar
它向我提示了一个错误:
异常线程"main"java.lang.NoClassDefFoundError: io/netty/Channel/EventLoopGroup在java.lang.Class.getDeclaredmethod ods0(本地方法)在java.lang.Class.privateGetDeclaredmethod(Class.java:2701)在java.lang.Class.privateGetMEDRecursive(Class.java:3048)java.lang.Class.getMEDOD0(Class.java:3018)java.lang.Class.get方法(Class.java:1784)sun.launcher.发射台elper.validate主类(发射台elper.java:544)在sun.launcher.发射台elper.check和加载主(发射台Helper. java: 526)引起: java. lang。异常:io. netty. channel.在java. net的EventLoopGroup。在java. lang的URLClassLoader. findClass(URLClassLoader. java: 381)。ClassLoader. loadClass(ClassLoader. java: 424)at sun. misc.在java. lang启动$AppClassLoader. loadClass(Launcher. java: 331)。ClassLoader. loadClass(ClassLoader. java: 357)...7 more
据我所知,JRE并没有在执行时找到Netty的EventLoopGroup类。在Eclipse中,我在Maven的dependency选项卡上看到了netty all依赖项,EventLoopGroup就在那里。我尝试过多次更改Netty的版本,但都不起作用。
这是我的主要代码:
package paplistener;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
public class PAPServer
{
private int port;
public PAPServer(int port)
{
this.port = port;
}
public void run() throws Exception
{
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch) throws Exception {
ch.pipeline().addLast(new CommandDecoder(),
new PAPServerHandler());
}
})
.option(ChannelOption.SO_BACKLOG, 128)
.childOption(ChannelOption.SO_KEEPALIVE, true);
ChannelFuture f = b.bind(port).sync();
f.channel().closeFuture().sync();
} finally {
workerGroup.shutdownGracefully();
bossGroup.shutdownGracefully();
}
}
public static void main(String[] args) throws Exception
{
int port = 8080;
if(args.length > 0)
{
port = Integer.parseInt(args[0]);
}
new PAPServer(port).run();
}
}
它几乎与Netty文档中的代码完全相同,但它在管道的开头添加了一个解码器。
这是我的pom。xml:
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>neurony.listener</groupId>
<artifactId>netty-listener</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.53.Final</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.12.1.GA</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<mainClass>paplistener.PAPServer</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/dependency-jars/
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
我能做些什么来解决这个问题?
EDIT1:将maven shade插件添加到pom。但是(相同的)问题仍然存在。
添加到pom的线条:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>paplistener.PAPServer</Main-Class>
<Build-Number>1</Build-Number>
</manifestEntries>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
EDIT2:将artifactSet添加到pom。xml,但它不起作用
<artifactSet>
<includes>
<include>io.netty:*</include>
</includes>
</artifactSet>
我也试过*:*就像尤里G.建议的那样。
EDIT3:解压的内容-l:
存档:netty-listener-0.0.1-SNAPSHOT。jar长度日期时间名称
0 10-29-2020 10:17 META-INF/
266 10-29-2020 10:17 META-INF/MANIFEST.MF
0 10-29-2020 10:17 paplistener/
2903 10-29-2020 10:17 paplistener/PAPCommandHandler.class
2554 10-29-2020 10:17 paplistener/PAPServer.class
2103 10-29-2020 10:17 paplistener/CommandDecoder.class
2834 10-29-2020 10:17 paplistener/PAPServerHandler.class
1319 10-29-2020 10:17 paplistener/PAPServer$1.class
0 10-29-2020 10:17 META-INF/maven/
0 10-29-2020 10:17 META-INF/maven/neurony.listener/
0 10-29-2020 10:17 META-INF/maven/neurony.listener/netty-listener/
3572 10-28-2020 12:29 META-INF/maven/neurony.listener/netty-listener/pom.xml
125 10-29-2020 10:17 META-INF/maven/neurony.listener/netty-listener/pom.properties
15676 13 files
似乎netty没有被复制到jar文件中。但我还是不知道怎么解决。我将在这里链接生成的. classpath(我猜是Eclipse生成的):
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src/test/java" output="target/test-classes" including="**/*.java"/>
<classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/>
<classpathentry kind="src" path="src/main/java" including="**/*.java"/>
<classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
<classpathentry kind="output" path="target/classes"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/Java SE 8 [1.8.0_121]"/>
<classpathentry kind="var" path="M2_REPO/io/netty/netty-all/4.1.30.Final/netty-all-4.1.30.Final.jar" sourcepath="M2_REPO/io/netty/netty-all/4.1.30.Final/netty-all-4.1.30.Final-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/javassist/javassist/3.12.1.GA/javassist-3.12.1.GA.jar" sourcepath="M2_REPO/javassist/javassist/3.12.1.GA/javassist-3.12.1.GA-sources.jar"/>
</classpath>
你错过了类路径。Eclipse管理自己的类路径,这就是它在Eclipse中工作的原因。
创建可由java-jar
简单执行的jar
文件的最简单方法是使用maven shade插件。您可以查看有关如何使用maven shade插件创建可执行jar的文档。
更新:您需要配置要包含在着色jar中的工件,如下所述。例如,如果希望包含所有依赖项(包括可传递项),可以执行以下操作:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<configuration>
<artifactSet>
<includes>
<include>*:*</include>
</includes>
</artifactSet>
<shadedArtifactAttached>false</shadedArtifactAttached>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>paplistener.PAPServer</Main-Class>
<Build-Number>1</Build-Number>
</manifestEntries>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
您可以在文档页面中看到所有可用的配置https://maven.apache.org/plugins/maven-shade-plugin/shade-mojo.html
插件元素不应在内部版本中-
<project>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.mycompany.app.App</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</project>
尝试将我的java应用程序从Eclipse导出到可运行的jar文件中。(这是一个控制台应用程序) 这是Eclipse中项目目录的外观: 以下是项目的运行配置: 这就是jar创建选项的外观: 最后,这是我得到的错误: 我真的试过了所有的东西,但我很困惑为什么它不运行。主类选择正确,运行配置似乎正确,我尝试了runnable和regular,两者都不起作用。 我尝试过清理、重建,甚至重新制作这个项目,
在src/main/groovy/foo/test2.java中: 分级文件: 我造了一个罐子: 我在这里有版本控制中的测试用例: https://github.com/wu-lee/test-groovy-main
问题内容: 我正在学习Go,并且想尝试goroutine和频道。 这是我的代码: 结果如下: 我不明白为什么我的goroutine永远不会执行。没有输入“进入goroutine”,并且没有任何错误消息。 问题答案: 事实是您的goroutine开始执行,但是在执行任何操作之前就结束了,因为您的程序在打印后立即停止:goroutine的执行与主程序无关,但是将在与程序相同的位置处停止。因此,基本上,
问题内容: 我正在尝试打开一个保存在源文件夹本身中的CSV文件名“ logger.csv”。 但是,这一直在给我一个“找不到文件”错误。 问题答案: 如果您现在就使用相对路径,则该文件需要存在于项目根目录中, 而不是 存在于java文件的目录中。 考虑以下层次结构: 不管用。 将 现在 的工作。(注意,该文件与src目录相邻。)
问题内容: 我在asp.net项目的Content文件夹中有一个json文件: …以及访问它的代码: …但是调用代码时什么也没发生;浏览器控制台说:“无法加载资源:服务器响应状态为404(未找到)” 为什么找不到?“波浪号文件名”不是通往文件的正确路径吗? 更新 我还尝试了向后“重击”: …并且得到相同的结果(“ 无法加载资源:服务器以404(未找到)状态进行响应 ”) 更新2 然后,我尝试了这种
我正试图用IntelliJ启动我的Java Gradle项目。 我和同事一样配置了Tomcat配置。 他们的项目建设得很好。 当我开始构建时,我在构建选项卡中看到以下内容。 它没有超出编写类的范围。 我的应用程序中没有任何ant任务。我只使用Gradle进行依赖关系管理。但出于某种原因,IntelliJ运行了一些Ant任务,并试图“编写”一些类。 构建在此之后挂起,大约3分钟后发生内存异常。只有我