最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

how is Classpath decided in java? what makes a valid classpath? - Stack Overflow

programmeradmin4浏览0评论

I understood how the classpath is necessary for running the project but I still have some doubt.

I compiled my class using

javac /Users/username/IdeaProjects/leetcodePrograms/src/problems/HouseRobberII213.java

after compiling, I did

java -cp /Users/username/IdeaProjects/leetcodePrograms/src/  problems.HouseRobberII213

this runs my program

but If I do

java -cp /Users/username/IdeaProjects/leetcodePrograms/  src.problems.HouseRobberII213 

This gives

Error: Could not find or load main class src.problems.HouseRobberII213
Caused by: java.lang.NoClassDefFoundError: src/problems/HouseRobberII213 (wrong name: problems/HouseRobberII213)

Someone pls explain why this issue. How was /Users/username/IdeaProjects/leetcodePrograms/src/ decided as valid classpath but not /Users/username/IdeaProjects/leetcodePrograms

I understood how the classpath is necessary for running the project but I still have some doubt.

I compiled my class using

javac /Users/username/IdeaProjects/leetcodePrograms/src/problems/HouseRobberII213.java

after compiling, I did

java -cp /Users/username/IdeaProjects/leetcodePrograms/src/  problems.HouseRobberII213

this runs my program

but If I do

java -cp /Users/username/IdeaProjects/leetcodePrograms/  src.problems.HouseRobberII213 

This gives

Error: Could not find or load main class src.problems.HouseRobberII213
Caused by: java.lang.NoClassDefFoundError: src/problems/HouseRobberII213 (wrong name: problems/HouseRobberII213)

Someone pls explain why this issue. How was /Users/username/IdeaProjects/leetcodePrograms/src/ decided as valid classpath but not /Users/username/IdeaProjects/leetcodePrograms

Share Improve this question asked Mar 25 at 3:40 Salil HardeniyaSalil Hardeniya 35 bronze badges 4
  • 1 It's not about the class path. There is just no class called src.problems.HouseRobberII213. In the file that declares HouseRobberII213, you probably have written package problems;, haven't you? If you have written package src.problems, then src.problems.HouseRobberII213 would exist. – Sweeper Commented Mar 25 at 3:45
  • Yes, my class is in package problems; Ok, I understand now. 1 final question. If classpath declares the location of .class file and java will search inside given path, why java -cp /Users/username/IdeaProjects/leetcodePrograms/. problems.HouseRobberII213 does not work – Salil Hardeniya Commented Mar 25 at 4:01
  • The search is not recursive. It won't look for the class in subdirectories. – Sweeper Commented Mar 25 at 4:03
  • ok, thanks, now understood. – Salil Hardeniya Commented Mar 25 at 4:04
Add a comment  | 

2 Answers 2

Reset to default 1

The class path is not invalid. It's just that there is no class called src.problems.HouseRobberII213 at the class path.

In HouseRobberII213.java, you have probably written the package declaration as:

package problems;

This means the fully qualified name of the class is problems.HouseRobberII213, not src.problems.HouseRobberII213.

If you had written

package src.problems;

Then there would indeed be a class called src.problems.HouseRobberII213.

It depends on your package design and code.

In case your code is below and save it to /some/where directory.

public class HouseRobber{

}

You need to comple it as below

cd /some/where  
javac HouseRobber  

Then you can add /some/where to your environment parameter CLASSPATH. So that you can launch your java program from any where.

java HouseRobber  

In case your code is like this:

package something;  
public class HouseRobber{  
}

You need to add the directory above something to CLASSPATH. Because Java will search something.HouseRobber from the directories in CLASSPATH.

发布评论

评论列表(0)

  1. 暂无评论