我创建了一个这样的JAR文件:
jar cf Predit.jar *.*
Run Code Online (Sandbox Code Playgroud)
我通过双击它来运行这个JAR文件(它不起作用).所以我从DOS提示符运行它,如下所示:
java -jar Predit.jar
Run Code Online (Sandbox Code Playgroud)
它引发了"无法加载主类"异常.所以我解压缩了这个JAR文件:
jar -xf Predit.jar
Run Code Online (Sandbox Code Playgroud)
我运行了类文件:
java Predit
Run Code Online (Sandbox Code Playgroud)
它运作良好.我不知道为什么JAR文件不起作用.请告诉我运行JAR文件的步骤
在几个简单的句子中,什么是Java ClassLoader,何时使用以及为什么?
好的,我读了一篇wiki文章.ClassLoader加载类.好.因此,如果我包含jar文件并导入,则ClassLoader可以完成这项工作.
我为什么要打扰这个ClassLoader?我从未使用它,也不知道它存在.
问题是,为什么ClassLoader类存在?而且,你如何在实践中使用它?(案件存在,我知道.)
我问这个问题是为了了解如何在JVM中增加运行时调用堆栈的大小.我已经得到了答案,我还得到了许多有用的答案和评论,这些答案和评论与Java如何处理需要大型运行时堆栈的情况有关.我已经用答案摘要扩展了我的问题.
最初我想增加JVM堆栈大小,所以程序就像没有运行的程序一样StackOverflowError.
public class TT {
public static long fact(int n) {
return n < 2 ? 1 : n * fact(n - 1);
}
public static void main(String[] args) {
System.out.println(fact(1 << 15));
}
}
Run Code Online (Sandbox Code Playgroud)
相应的配置设置是java -Xss...具有足够大值的命令行标志.对于TT上面的程序,它与OpenJDK的JVM一样:
$ javac TT.java
$ java -Xss4m TT
Run Code Online (Sandbox Code Playgroud)
其中一个答案还指出,这些-X...标志是依赖于实现的.我在用
java version "1.6.0_18"
OpenJDK Runtime Environment (IcedTea6 1.8.1) (6b18-1.8.1-0ubuntu1~8.04.3)
OpenJDK 64-Bit Server VM (build 16.0-b13, mixed mode)
Run Code Online (Sandbox Code Playgroud)
也可以仅为一个线程指定一个大堆栈(参见其中一个答案如何).建议使用此方法java -Xss...以避免为不需要它的线程浪费内存.
我很好奇上面的程序需要多大的堆栈,所以我运行它n增加了:
fact(1 …每当我运行我的项目JUnit测试(使用JUnit 5与Java 9和Eclipse Oxygen 1.a)我遇到eclipse无法找到任何测试的问题.
在运行配置下,eclipse甚至找不到用@Test注释的方法,而是只显示" (所有方法) ".以下图片有望为我的设置提供更好的一瞥:
java.lang.NoClassDefFoundError: org/junit/platform/launcher/core/LauncherFactory
at org.eclipse.jdt.internal.junit5.runner.JUnit5TestLoader.<init>(JUnit5TestLoader.java:31)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.base/java.lang.Class.newInstance(Unknown Source)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createRawTestLoader(RemoteTestRunner.java:368)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createLoader(RemoteTestRunner.java:363)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.defaultInit(RemoteTestRunner.java:307)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.init(RemoteTestRunner.java:222)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
Caused by: java.lang.ClassNotFoundException: org.junit.platform.launcher.core.LauncherFactory
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
... 11 more
Run Code Online (Sandbox Code Playgroud)
我已经试过了
其中一些步骤可以在这里找到,但最终问题仍然存在.
我有一个有趣的问题,在运行时没有找到org.apache.log4j.Logger类.我正在尝试获得授权,这就是它失败的地方:
OAuthAuthorizer oauthAuthorizer = new OAuthAuthorizer(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET, SAML_PROVIDER_ID, userId);
我正在使用JDeveloper 11.1.1.6.这就是我所知道的:
我查看了我的UI.war/WEB-INF/lib目录,我看到了log4j-1.2.17.jar.
抱怨它的类是org.opensaml.xml.XMLConfigurator
Caused by: java.lang.NoClassDefFoundError: org/apache/log4j/Logger
at org.opensaml.xml.XMLConfigurator.<clinit>(XMLConfigurator.java:60)
at org.opensaml.DefaultBootstrap.initializeXMLTooling(DefaultBootstrap.java:195)
at org.opensaml.DefaultBootstrap.bootstrap(DefaultBootstrap.java:91)
at com.intuit.ipp.aggcat.util.SAML2AssertionGenerator.getSAMLBuilder(SAML2AssertionGenerator.java:156)
at com.intuit.ipp.aggcat.util.SAML2AssertionGenerator.createSubject(SAML2AssertionGenerator.java:187)
at com.intuit.ipp.aggcat.util.SAML2AssertionGenerator.buildAssertion(SAML2AssertionGenerator.java:114)
at com.intuit.ipp.aggcat.util.SAML2AssertionGenerator.generateSignedAssertion(SAML2AssertionGenerator.java:83)
at com.intuit.ipp.aggcat.util.SamlUtil.createSignedSAMLPayload(SamlUtil.java:156)
at com.intuit.ipp.aggcat.util.OAuthUtil.getOAuthTokens(OAuthUtil.java:60)
at com.intuit.ipp.aggcat.core.OAuthAuthorizer.<init>(OAuthAuthorizer.java:85)
at com.incomemax.view.intuit.WebUtil.getAggCatService(WebUtil.java:91)
Run Code Online (Sandbox Code Playgroud)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:305)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:246)
... 64 more
Run Code Online (Sandbox Code Playgroud)我解压缩了XMLConfigurator,奇怪的是它没有导入org.apache.log4j.Logger它使用org.slf4j.Logger,它也在我的jars目录中(slf4j-api-1.7.5.jar).同样有趣的是,第60行(参见堆栈跟踪)是我的反编译中的空行.
当然,如果我在设计时添加Logger.xxxxx,它会发现它很好.
我直接从示例java代码中使用代码/ jar,但导入到我现有的应用程序中.
我一直在网上寻找答案,我相信我已经检查了所有我能想到的领域.我也引用了这个非常好的页面:http://myarch.com/classnotfound/
鉴于授权是使用Intuit Developer API的第1步,我有点卡住了.
从@jhadesdev建议中添加输出:
所有版本的log4j Logger:
从OAuthAuthorizer类的类加载器可以看到所有版本的log4j:
所有版本的XMLConfigurator:
罐子:文件:/ …
这是我的控制器里面的方法,注释方法是 @Controller
@RequestMapping(value = "/getServerAlertFilters/{serverName}/", produces = "application/json; charset=utf-8")
@ResponseBody
public JSONObject getServerAlertFilters(@PathVariable String serverName) {
JSONObject json = new JSONObject();
List<FilterVO> filteredAlerts = alertFilterService.getAlertFilters(serverName, "");
JSONArray jsonArray = new JSONArray();
jsonArray.addAll(filteredAlerts);
json.put(SelfServiceConstants.DATA, jsonArray);
return json;
}
Run Code Online (Sandbox Code Playgroud)
我期待着{"data":[{"useRegEx":"false","hosts":"v2v2v2"}]}作为我的json.
这是我的JUnit测试:
@Test
public final void testAlertFilterView() {
try {
MvcResult result = this.mockMvc.perform(get("/getServerAlertFilters/v2v2v2/").session(session)
.accept("application/json"))
.andDo(print()).andReturn();
String content = result.getResponse().getContentAsString();
LOG.info(content);
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
这是控制台输出:
MockHttpServletResponse:
Status = 406
Error message = null
Headers = {} …Run Code Online (Sandbox Code Playgroud) 我在Eclipse上的构建路径中放置了所需的文件后,我一直收到以下错误.我正在开发一个Spring MVC Hello World Application.我正在为Java EE开发人员运行Eclipse Helios:
Jan 16, 2012 1:25:42 PM org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet /SpringMVCTutorial threw load() exception
java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:415)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:397)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1062)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1010)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4957)
at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5284)
at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5279)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
我试过右键单击服务器并单击"清除".我右键单击该应用程序,单击"构建路径","配置构建路径",并将正确的.jar文件放入库中; 但是,它仍然不承认它们是依赖关系.我错过了什么?
我已经尝试过提出的建议: eclipse helios:tomcat project - jar不会被导出或发布.运行时可能会导致ClassNotFoundExceptions
问题是,当我选择"单击属性"时,我没有选择单击Java EE模块依赖项,因为它没有出现.我下载了任何额外的Java EE工具但仍无法找到它.
有没有人在运行项目时见过这个
Error:Module 'Android' production: java.lang.NoClassDefFoundError: com/android/resources/ResourceFolderType
Run Code Online (Sandbox Code Playgroud)
我在 Android Studio 3.6.1 上使用 Eclipse 编译器 没有什么有用的显示在 google 上
我已经完成了这个线程是什么原因以及NoClassDefFoundError和ClassNotFoundException之间有什么区别? 这是一个在线程中具有max ups的ans之一: NoClassDefFoundError:"因此,当源成功编译时,似乎会发生 NoClassDefFoundError ,但是在运行时,找不到所需的类文件.这可能是在分发或生成JAR文件时可能发生的事情,其中并未包含所有必需的类文件."
ClassNotFoundException:对于ClassNotFoundException,它似乎可能源于尝试在运行时对类进行反射调用,但程序试图调用的类不存在.
我做了一个小实验.我创建了一个主类,类A,并尝试从中调用其他类,类B,编译成功.
然后我删除了在类A中调用的类B.我得到了 java.lang.ClassNotFoundException但是根据脚步中的答案,我应该得到NoClassDefFoundError(源代码已成功编译,但未找到运行时类文件)任何人都可以解释我在线程中对ans的解释中缺少什么?
package com.random;
public class A {
public static void main(String[] args) {
B b= new B();
}
}
package com.random;
public class B {
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试特别使用 SLF4J 和 Logback 来实现 RollingFile Logger,但我遇到了一个无法解决的异常。这里是:
Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
at org.springframework.boot.logging.logback.LogbackLoggingSystem.getLoggerContext(LogbackLoggingSystem.java:293)
at org.springframework.boot.logging.logback.LogbackLoggingSystem.beforeInitialize(LogbackLoggingSystem.java:118)
at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationStartingEvent(LoggingApplicationListener.java:232)
at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:213)
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131)
at org.springframework.boot.context.event.EventPublishingRunListener.starting(EventPublishingRunListener.java:76)
at org.springframework.boot.SpringApplicationRunListeners.lambda$starting$0(SpringApplicationRunListeners.java:53)
at java.util.ArrayList.forEach(ArrayList.java:1259)
at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:117)
at org.springframework.boot.SpringApplicationRunListeners.starting(SpringApplicationRunListeners.java:53)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:317)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1313)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1302)
at com.upnetix.java.simeonyachev.PlexUserNameApplication.main(PlexUserNameApplication.java:13)
Caused by: java.lang.ClassNotFoundException: org.slf4j.impl.StaticLoggerBinder
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 17 more
Run Code Online (Sandbox Code Playgroud)
那是我的 pom.xml :
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.4</version>
<relativePath/>
</parent>
<dependencies>
<!--SPRING BOOT-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<!-- <exclusions>-->
<!-- …Run Code Online (Sandbox Code Playgroud)