从命令行编译java的问题 [英] Problems compiling java from command line

查看:91
本文介绍了从命令行编译java的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是文件夹结构:



 C:。 $ b $b└───src$ b $b├───main$ b $b│└───java$ b $b│└───com$ b $b│└───myCompany$ b $b│└───Runner.java$ b $b│$ b $b└───test$ b $b└───java$ b $b└───com$ b $b└───── myCompany $ b $b└───BasicTest.java





这是BasicTest.java:



 package com.myCompany; 

import junit.framework.TestCase;

公共类BasicTest扩展TestCase {

public BasicTest(){
}

public void testTrue(){
assertTrue(真);
}
}





这是Runner.java:



 package com.myCompany; 

公共类Runner {

public static void main(String [] args){

BasicTest bt = new BasicTest();
bt.testTrue();

System.out.print(已完成);
}
}





很简单,对吧?请继续阅读...



我尝试过:



时间编译BasicTest.java



 C:\ workspace \BasicTest> javac -cp c:\ junit\latest \ junit -4.10.jar c:\ workspace \ BasicTest \ src\test\java \ com \ myCompany \ * .java 





这很好用...



当我尝试编译Runner.java时,我得到了这个:



 C:\ workspace \BasicTest> javac -cp c:\ workspace \BasicTest \src\test\java \ com \ myCompany c: \ workspace \ BASesTest \ src \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ pre> c:\ workspace \BasicTest \ src \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ com \ myCompany \ Runner.java:7:错误:找不到符号
BasicTest bt = new BasicTest();
^
符号:class BasicTest
location:class Runner
c:\ workspace \BasicTest \ src \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ .java:7:错误:找不到符号
BasicTest bt = new BasicTest();
^
符号:class BasicTest
location:class Runner
2错误





我用谷歌搜索,直到我脸红了,无法弄清楚这个错误。我理解错误,它是基本的,我想说的是我不明白为什么我得到它 - 我明确地给了编译器路径。

解决方案

我一直在玩这个,并阅读设置类路径 [ ^ ],并设法建立一个集合,虽然不是你拥有的完整目录树。使用简化的类路径树尝试以下操作:

 javac -cp c:\ workspace \BasicTest \src\test\java c:\ workspace \\ \\ BASicTest\src\main\java\com\myCompany \ * .java 





[edit]

因为(我认为) BasicTest 是(暗示是)在包 com.myCompany 中编译器和运行时将在%CLASSPATH%\ com \ myCompany 中搜索它,因此出现问题。

[/ edit]


@Richard MacCutchan,谢谢你的回复!



虽然我真的很困惑... ... >


引用:

因为(我认为)BasicTest是(暗示是)在包com中.myCompany





这并不意味着。它是!两个源文件都以:



 package com.myCompany; 





Quote:

使用简化的类路径树尝试以下操作:

隐藏复制代码

javac -cp c:\ workspace \BasicTest \ src \ test \ java c:\ workspace \BasicTest \ src \\\\\\\\\\\\\\\ \ * .java





这本身就会引发一堆错误......它没有考虑到junit jar。



当我修改你的建议时:



javac -cp c:\ junit \\ \\ _ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \ * .java



它有效!!!谢谢。



但这还没有解决。它编译 - 但是我无法运行:



 C:\ workspace \BasicTest \src \ main \ java> java com.myCompany.Runner< br /> 
线程main中的异常java.lang.NoClassDefFoundError:com / myCompany / BasicTest< br />
at com.myCompany.Runner.main(Runner.java :7)< br />
引起:java.lang.ClassNotFoundException:com.myCompany.BasicTest< br />
at java.base / jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader .java:582)< br />
在java.base / jdk.internal.loader.ClassLoaders


AppClassLoader.loadClass(ClassLoaders.java:185)< br />
在java.base / java.lang.ClassLoader.loadClass(ClassLoader.java:496)< br />
... 1更多


Here's the folder structure:

C:.
└───src
    ├───main
    │   └───java
    │       └───com
    │           └───myCompany
    │               └───Runner.java
    │
    └───test
        └───java
            └───com
                └───myCompany
                    └───BasicTest.java



Here's BasicTest.java:

package com.myCompany;

import junit.framework.TestCase;

public class BasicTest extends TestCase {
	
  public BasicTest() {
  }	  
	
  public void testTrue() {
    assertTrue(true);
  }
}



Here's Runner.java:

package com.myCompany;

public class Runner {

public static void main(String[] args) {

    BasicTest bt = new BasicTest();
    bt.testTrue();

    System.out.print("Finished");
  }
}



Simple enough, right? Read on...

What I have tried:

Time to compile BasicTest.java

C:\workspace\BasicTest>javac -cp c:\junit\latest\junit-4.10.jar c:\workspace\BasicTest\src\test\java\com\myCompany\*.java



This works just fine...

When I try to compile Runner.java, I get this:

C:\workspace\BasicTest>javac -cp c:\workspace\BasicTest\src\test\java\com\myCompany c:\workspace\BasicTest\src\main\java\com\myCompany\*.java



c:\workspace\BasicTest\src\main\java\com\myCompany
c:\workspace\BasicTest\src\main\java\com\myCompany\Runner.java:7: error: cannot find symbol
    BasicTest bt = new BasicTest();
    ^
  symbol:   class BasicTest
  location: class Runner
c:\workspace\BasicTest\src\main\java\com\myCompany\Runner.java:7: error: cannot find symbol
    BasicTest bt = new BasicTest();
                       ^
  symbol:   class BasicTest
  location: class Runner
2 errors



I've googled until I'm blue in the face and cannot figure this error out. I understand the error, it's elementary enough, what I'm trying to say is I don't understand why I'm getting it -- I explicitly gave the compiler the paths.

解决方案

I have been playing around with this, and reading Setting the class path[^], and managed to get a set built, although not the complete directory tree that you have. Try the following, with the reduced classpath tree:

javac -cp c:\workspace\BasicTest\src\test\java c:\workspace\BasicTest\src\main\java\com\myCompany\*.java



[edit]
Because (I think) BasicTest is (implied to be) in package com.myCompany the compiler and runtime will search for it in %CLASSPATH%\com\myCompany, hence your problems.
[/edit]


@Richard MacCutchan, thanks for the reply!

I'm really confused by a couple of things though...

Quote:

Because (I think) BasicTest is (implied to be) in package com.myCompany



It's not implied to be. It is! Both source files start with:

package com.myCompany;



Quote:

Try the following, with the reduced classpath tree:
Hide Copy Code
javac -cp c:\workspace\BasicTest\src\test\java c:\workspace\BasicTest\src\main\java\com\myCompany\*.java



That by itself throws a mess of errors... it's not taking into account the junit jar.

When I modify your suggestion like so:

javac -cp c:\junit\latest\junit-4.10.jar;c:\workspace\BasicTest\src\test\java c:\workspace\BasicTest\src\main\java\com\myCompany\*.java

It works!!! Thank-you.

But this still isn't solved yet. It compiles -- but I cannot run:

C:\workspace\BasicTest\src\main\java>java com.myCompany.Runner<br />
Exception in thread "main" java.lang.NoClassDefFoundError: com/myCompany/BasicTest<br />
        at com.myCompany.Runner.main(Runner.java:7)<br />
Caused by: java.lang.ClassNotFoundException: com.myCompany.BasicTest<br />
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)<br />
        at java.base/jdk.internal.loader.ClassLoaders


AppClassLoader.loadClass(ClassLoaders.java:185)<br /> at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)<br /> ... 1 more


这篇关于从命令行编译java的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆