【问题标题】:how to build system in sublime text 3 for java which also supports packages?如何在 sublime text 3 中为 java 构建系统,它也支持包?
【发布时间】:2020-05-07 10:33:10
【问题描述】:

我已将我所有的 java 项目存储如下:

C:\Users\swagat\Documents\JavaProjects\name_of_1st_project\all_source_files.java C:\Users\swagat\Documents\JavaProjects\name_of_2nd_project\all_source_files.java C:\Users\swagat\Documents\JavaProjects\name_of_3rd_project\all_source_files.java C:\Users\swagat\Documents\JavaProjects\name_of_4th_project\all_source_files.java

希望您了解层次结构。

现在我正在尝试用 sublime text 3 创建一个构建系统,它可以通过单击编译和运行任何 java 程序。

我的构建系统包含:

{
    "shell_cmd": "javac $file && java $file_base_name"
}

我还将 CLASSPATH 环境变量设置为指向 C:\Users\swagat\Documents\JavaProjects

我不想为每个项目设置不同的 CLASSPATH

如果我不在我的 java 源代码中使用包,则上述设置有效

但是当我使用包时,例如: package name_of_1st_project; 在我的 java 源代码中,然后我得到构建错误“无法找到或加载主类 name_of_1st_project。 引起:java.lang.NoClassDefFoundError: name_of_1st_project/name_of_1st_project(错误名称:name_of_1st_project)

为了解决这个问题,我将构建文件修改为:

{
    "shell_cmd": "javac $file && java $file_base_name.name_of_1st_project"
}

它解决了这个问题,但仅适用于第一个项目。

我想使用正则表达式或任何可以在 sublime 构建系统文件末尾附加“.name_of_nth_project”的方法使其动态化。 我阅读了 sublime 文档,发现没有可以使用的具有当前文件夹名称的变量(只是名称,不包括路径)。

我搜索了整个互联网,但没有找到确切的解决方案。请帮忙。(也许我的cmets可以帮忙)

【问题讨论】:

  • 如果使用包,程序可以通过:java pkg1.pkg2.pkg3.file_name 执行,我只是想在sublime build中做同样的事情来执行程序
  • 如果您有多个 Java 项目并希望为它们进行统一构建,那么可能是时候调查并使用适当的构建工具了(然后 sublime 只需要执行构建工具的任务,不知道如何编译东西的细节)。您实际上是在尝试构建一个穷人构建系统。 Gradle 是目前 Java 世界中流行的一种,稍旧的 Maven 也是如此。
  • 我不知道如何在 sublime 构建中实现这个工作正则表达式,它可以只过滤文件夹路径中的文件夹名称。正则表达式可以在 regex101.com/r/qA9eZ1/89 中找到。请帮助我在 sublime 构建中实现此正则表达式以从路径中过滤文件夹名称(文件夹的路径是名为“$file”的 sublime 的系统变量)

标签: java regex cmd sublimetext3 sublime-build


【解决方案1】:

将 sublime 构建文件更改为:

{
    "shell_cmd": "javac $file && java $file_base_name.$file_base_name"
}

但文件夹名和包名要与包含main方法的文件名一致。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 2015-03-01
    • 2013-10-14
    • 2014-10-30
    • 2018-04-27
    • 2015-02-04
    相关资源
    最近更新 更多