【问题标题】:Why are my Java code changes not being reflected when ran from command line but working in Eclipse?为什么从命令行运行但在 Eclipse 中运行时没有反映我的 Java 代码更改?
【发布时间】:2020-08-29 13:43:32
【问题描述】:

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

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

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

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

【问题讨论】:

  • 在类路径中,您有源 (src\main\java) 而不是输出文件夹(如果是 Maven 项目,可能是 target/classes;否则可能是 bin)。在运行配置中有一个 Show Comman Line 按钮,您可以通过该按钮获取 Eclipse 使用的命令行。
  • 哇,这是一个快速的答案,它奏效了!谢谢!添加它作为答案,我可以接受它

标签: java eclipse command-line javac


【解决方案1】:

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

Eclipse 有一个称为“构建器”和“项目类型”的概念,并且根据您设置 java 项目的方式,eclipse 的 build-on-save 架构的工作方式有所不同。

假设您刚刚进入:“文件 > 新项目 > Java 项目”,并选择了所有默认选项,Eclipse 的设置方式是您有一个 src 目录(事实上您编写了 src/main/java你没有这样做,但为了举例,我会继续),当你在 eclipse 中保存任何 java 文件时,eclipse 将立即更新这个的构建视图,它会在一个目录中挂起名为bin的项目根目录。

这就是类文件所在的地方,所以如果你想在命令行上运行这些文件,正确的做法是:

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

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

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

【讨论】:

  • 是的,最后一段正是我所需要的。我在类路径中需要{projroot}\target\classes。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-06
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多