为什么当从命令行 运行 但在 Eclipse 中工作时,我的 Java 代码更改没有反映出来?

Why are my Java code changes not being reflected when ran from command line but working in Eclipse?

我正在使用 bash 脚本来 运行 我在 Eclipse 中创建的 Java 程序,Java 程序在 运行 时运行良好来自 Eclipse。它有我最近的更改,我可以通过我刚刚插入的一些打印语句和再次 运行 来判断。

但是,当我 运行 我的 bash 脚本时,这些打印语句和我的所有其他更改都没有被看到,它实际上只是 运行 这样的程序(使用 testNG ):

java -cp ".\src\main\java;lib\*;" org.testng.TestNG ParallelTestXML.xml

我已经在 Eclipse 中清理了项目并确保单击了自动生成,尽管我认为如果它没有在 Eclipse 中编译最近的更改,那是为了修复。所以我不知道它还能是什么。

因为.\src\main\java没有做任何有用的事情。

Eclipse 有一个叫做 'builders' 和 'project kinds' 的概念,并且根据您设置 java 项目的方式,eclipse 的 build-on-save 架构会有所不同。

假设您刚刚进入:“文件 > 新建项目 > Java 项目”,并选择了所有默认选项,eclipse 的设置方式是您有一个 src 目录(事实上,你写 src/main/java 掩盖了你没有这样做,但为了举例,我会继续),当你在 eclipse 中保存任何 java 文件时,eclipse 将立即更新一个内置的从这个角度来看,它将位于项目根目录下的一个名为 bin.

的目录中

那是 class 文件所在的位置,所以如果您想 运行 关闭命令行上的文件,正确的做法是:

java -cp ".\bin;lib\*;" org.testng.TestNG ParallelTestXML.xml

添加 src 目录是完全没有意义的,除非 class 文件就在源文件旁边,在这种情况下调用该目录 src 显然是非常愚蠢的(作为一般规则编程,选择一个显然是谎言的名字,是一个非常糟糕的主意,原因很明显)。

如果您有一些其他项目设置,例如,您已将其设置为 Maven 项目或 gradle 项目,那么,这取决于您如何配置 eclipse,eclipse 是否正在尝试 'match' 构建,或者在每次保存时触发完整的 Maven 构建,或者如果您应该手动调用 Maven。最有可能是后者。让 maven 进行构建,然后 maven 将在某个地方构建您的东西。通常,{projroot}\target\classes,但对于 'run' 您的应用程序,如果您的应用程序是使用 maven 构建的,请不要调用 java。调用 mvn,要求它测试你的东西。这样 mvn 就会照顾你的部门等等。