idea为什么找不到主要类别
❶ intellij IDEA为什么我代码编译的时候没有问题 但是maven打包的时候报错找不到类代码中都import过了啊
两者配置的CLASSPATH(Maven的依赖),相同吗
❷ 为什么用idea写scala程序总显示找不到主类
这个问题我解决了,在设置SparkConf()的时候,需要把本机生成的JAR包路径进行制定,如:valconf=newSparkConf().setAppName("SogouResult").setMaster("spark://master:7077").setJars(List("D:\\IDEAworkspace\\helloSpark\\out\\artifacts\\helloSpark_jar\\helloSpark.jar"))
❸ idea里写上包名就会提示无法加载主类,不写就没事是什么原因
找不到主类是因为classpath配置错误。
是环境变量的问题,看看你的path和classpath是否是正确的,最可能的错误是classpath中少了前面少了.;
classpath的配置必须遵循以下规则:
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
❹ idea启动tomcat错误,提示找不到或无法加载主类 #
查看一下当前工程的jdk环境是否正常
❺ IDEA Gradle 找不到或无法加载主类 a.AB Exception in thread "main" java.lang.NoClassDefFoundError
java java.lang.NoClassDefFoundError 的解决办法
(2008-12-23 01:14:03)转载▼
标签:
java
noclass
deffound
解决办法
以简单而经典的 “HelloWorld.java” 为例
不含包层次的HelloWorld.java
public class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
保存在E:javasrc下,命令行下,改变当前路径到:E:javasrc,使用javac命令编译:
E:javasrc>javac HelloWorld.java
运行:
E:javasrc>java HelloWorld
屏幕打印出:
Hello World!
初学者常犯的错误
1. 运行时,带了.class后缀
如果你试图使用如下命令:
E:javasrc>java HelloWorld.class
系统会误认为你运行的是HelloWorld包下的名为class的类文件,会到系统的CLASSPATH下(一般都包括当前目录)企图寻找 HelloWorld.class.class这样的类,这样的类当然不存在了;并且也不可能存在,因为class是关键字,不能作为一个类的名字。所以 会报如下错误信息:
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld/class
2. 文件名大小写错误
对于像Windows这样的系统,编译时可以不关心大小写。比如编译HelloWorld.java时,也可以使用:
E:javasrc>javac helloworld.java
也可以编译通过,但产生的类文件仍然是和源文件相符的:HelloWorld.class。
但在运行时一定要注意大小写,比如试图使用如下命令运行:
E:javasrc>java helloworld
将报类似于1中的错误:
Exception in thread "main" java.lang.NoClassDefFoundError: helloworld (wrong name: HelloWorld)
包含包层次的HelloWorld.java
比如上面的HelloWorld.java修改如下:
package org.javaresearch;
public class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
编译时有两种方法
1. 直接编译
E:javasrc>javac HelloWorld.java
此时在当前目录下输出HelloWorld.class。此时,运行不能使用上面相同的方法,使用:
E:javasrc>java HelloWorld
运行时,出现如下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong name: org/javaresearch/HelloWorld)
从上述错误信息你也可以看到,系统可以找到HelloWorld类(因为当前路径包含在CLASSPATH中,具体为什么会提示wrong name,有兴趣的朋友参见Java语言规范),但这个类属于org.javaresearch包。所以,你要做的就是按照上述包层次,相应的创建目录层 次,把上面生成的HelloWorld.class放到E:javasrcorgjavaresearch目录下。运行(这时候是在包层次的最高层目录下运行的):
E:javasrc >java org.javaresearch.HelloWorld
系统打印出:
Hello World!
这儿要注意的是,不能使用java orgjavaresearchHelloWorld来运行,此时同样会出现如下错误:
Exception in thread "main" java.lang. (wrong name: org/javaresearch/HelloWorld)
因为类名的书写是用句点来分割包名的层次的,引用java类库里面的类也可以这样写:java.util.List 类的全名就是这样的,我们如果在 import 语句里写上 import java.util.List;
那么,就不用写全名了,直接写 List list = new ...;java 编译器就可以知道是 List 什么类.但是,由于,java.util 这个包 和 java.sql 这个包都有一个 Date 类,所以,如果 同时导入这两个包,那么会
导致java 编译器不知道引用那个类,有两种解决办法:
a. 用全名来引用类:java.util.Date date1 = ...;java.sql.Date date2 = ...;
b. 不要导入整个包,只导入所需要的类,如果你同时需要这两个 Date 类,那么只能写全名了,如果
你不是同时需要这两个类,你可以只导入需要的包:
比如:import java.util.List; import java.sql.Date;这样就不会冲突,因为编译器可以十分清楚的区分
这个 Date 类是 java.sql 包中的, java.util 包中的 Date 类根本就没有导入进来。
这一点,可以按照常理来理解,还是比较好理解的。
2. 使用 -d <directory>编译选项
是不是觉得上面的编译方法有点麻烦,能不能自动在当前路径(或任意指定的路径)下生成包层次呢?有!使用-d <directory>编译选项就能做到。
E:javasrc >javac
(其中的点表示当前目录。d 和 . 之间有空格, .和后面的java文件名之间也有空格)
此时,在当前目录下就生成了一个orgjavaresearch目录,并且输出的.class文件也在里面。运行:
E:javasrc >java org.javaresearch.HelloWorld
系统打印:Hello World!
如果你想把生成的类文件集中存放在一个目录中,比如:E:javaclasses下,那么你首先创建这个目录,然后编译时:
E:javasrc >javac -d E:javaclasses HelloWorld.java
就可以把生成的类文件放到E:javaclasses目录下,并且按照包层次相应的创建目录路径。你可以在E:javaclassesorg javaresearch下找到HelloWorld.class文件。此时使用如下命令可以正确运行(注意如果要用到其它类,请在CLASSPATH中 设好):
E:javaclasses >java org.javaresearch.HelloWorld
❻ 关于在IDEA中使用maven的运行test目录下的main方法无法找到类的
pom.xml 报错先调试好
测试类需要继承TestCase
编译后 arget est-classes下面要有class和测试需要的资源文件,就需要在pom.xml中加
<build><testResources><testResource><directory> src/main/resources</directory><filtering>true</filtering></testResource></testResources></build>
❼ idea出现这种情况 junit一直提示找不到class
ass Book {
public String name;
public String author;
private int availNum;
public Book() {
this("", "", 0);
}
public Book(String name, String author, int availNum) {
this.name = name;
this.author = author;
this.availNum = availNum;
}
public int getAvailNum() {
return availNum;
}
public void setAvailNum(int availNum) {
this.availNum = availNum;
}
public boolean subscribe() {
if (availNum > 0) {
availNum--;
return true;
}
return false;
}
public boolean cancelSubscribe() {
availNum++;
return true;
}
}
/** Book类的单元测试类 */
import junit.framework.TestCase;
public class TestBook extends TestCase {
public void testBook() {
Book book = new Book("Thinking in Java", "Bruce Eckel", 3);
assertEquals(true, book.subscribe());// 第一次预借,应该是成功的
assertEquals(2, book.getAvailNum());// 此时的可预借数是2
assertEquals(true, book.cancelSubscribe());// 取消预借,应该是成功的
assertEquals(3, book.getAvailNum());// 此时的可预借数是3
book.setAvailNum(0);// 将可预借数设为0
assertEquals(false, book.subscribe());// 此时预借,应该是不成功的
}
public static void main(String[] args) {
junit.textui.TestRunner.run(Book.class);
}
}
上面的测试类可以不要main函数,直接在集成开发环境里用JUnit执行单元测试。
❽ IntelliJ IDEA 找不到或无法加载主类 com.company.Main到底怎么弄
如果是直接通过dos命令的话,就需要先编译在运行。
如果是在开发工具里面的话,完全没问题。建议你用eclipse运行一下。
就代码本身而言是没有问题的,看是否是其他的问题。
❾ idea找不到或无法加载主类,看图,百度的方法没有解决,求大神。
借助idea找主类,需要嵌入jdk。
测试jdk找不到或无法加载主类。
嵌入需要安装以后,正确配置环境变量。
❿ java运行显示“找不到或无法加载主类”!
该如何解决呢?解决办法如下:
1.由于是在运行阶段出现的问题,那么可能是环境变量配置不当的问题,即可能是classpath路径配置错误,而导致.class文件无法加载。那么此时你可以检查是否配置好classpath路径,一般来说classpath路径配置如下:
.;%java_home%lib;%java_home%lib ools.jar; (注意前面的 . 以及 ; 缺一不可)
其中.表示当前路径,;表示分隔符。
2.如果你试过了很多次,classpath也配置对了,依旧出现这个错误,注意你使用的测试代码,是否在某一个包名的下面;
比如说如下测试代码:
在文件所在的当前目录下,运行javac TestPlusPlus.java编译成功,生成TestPlusPlus.class文件,这个时
候,你用javaTestPlusPlus想运行程序,总会出现”找不到或无法加载主类“的错误。这个时候要注意,
之所以找不到,是因为TestPlusPlus在HelloWorld包名的下面。
解决办法:
1.去掉 ”packageHelloWorld;“ 重新用javac 编译TestPlusPlus.java,再运行javaTestPlusPlus就可以了。
2.新建一个包名一样的文件夹,在本例中,为建立一个HelloWorld的文件夹,把TestPlusPlus.java文件移到该目录下。
然后在HelloWorld文件夹的平级下,打开DOS命令窗口,运行javacHelloWorld/TestPlusPlus.java编译程序,
运行javaHelloWorld/TestPlusPlus(或者javaHelloWorld.TestPlusPlus也可以),则可以运行含有包名的java程序。
注意:包名不要含有'.'(点),' '(空格)等特殊符号,这样的话命令行无法判断包名与java程序名的分割点在哪里,
从而还是找到或者无法加载主类。
原理说明:
java程序运行class文件,对于有包名的类,java把包名当成文件夹处理."包名+类名"相当于"文件夹目录+类名"来寻找类。