我正在尝试在崇高文本3中导入自定义java包。
以下是目录的要点:
OuterDirectory
|________ Chapter02
|___________Question1
|___________ MyClassTryingToImport.java
|________ Helperlib
|___________ MyClass.java
// MyClassTryigToImport.java
import Helperlib.MyClass; // error: package Helperlib does not exist
//MyClass.java
package Helperlib;
public class MyClass { ... }
请不要仅仅使用eclipse,而是提供解决方案。 提前致谢!
答案 0 :(得分:1)
在大多数情况下,你的问题并不真正适用于Sublime,更多的是一般只编程Java。
我不会说所有Java问题的解决方案都是使用Eclipse或IntelliJ等Java IDE,但更多的是它有助于了解任何工具(包括Sublime)在幕后为您做什么,所以你可以更容易地诊断问题。
在Sublime Text的特定情况下,编辑器附带了两个与Java相关的构建系统供您使用。
其中第一个JavaC.sublime-build
,如下所示:
{
"shell_cmd": "javac \"$file\"",
"file_regex": "^(...*?):([0-9]*):?([0-9]*)",
"selector": "source.java"
}
这只是在当前文件上调用javac
而没有其他命令行参数。因此,它所做的就是编译当前文件;在简单的情况下,这有助于验证您的Java代码是否有效,但是一旦您开始做任何更复杂的事情(或者想要实际运行您的代码),您就会遇到问题。
发布的第二个构建系统Ant.sublime-build
如下所示:
{
"cmd": ["ant"],
"file_regex": "^ *\\[javac\\] (.+):([0-9]+):() (.*)$",
"working_dir": "${project_path:${folder}}",
"selector": "source.java",
"keyfiles": ["build.xml"],
"windows":
{
"cmd": ["ant.bat"]
}
}
这个调用ant
,这是一个由Apache编写的Java构建系统,如果你有兴趣在没有任何第三方软件包的情况下使用核心Sublime,那么它更适合用Sublime做任何事情。
要走这条路线,您需要创建一个build.xml
文件来描述您的项目以及如何构建和运行它。这远远超出 SO 答案的范围,但Ant Manual包含一些可能有帮助的教程。
为了帮助您入门,这是一个基于原始问题的最小工作示例。
此示例中的目录结构如下所示:
.
|-- Chapter02
| `-- Question1
| `-- MyClassTryingToImport.java
|-- Helperlib
| `-- MyClass.java
`-- build.xml
相关文件的内容:
package Chapter02.Question1;
import Helperlib.MyClass;
public class MyClassTryingToImport
{
public static void main(String[] args)
{
MyClass helperClass = new MyClass();
System.out.println("I'm the one who knocks!");
helperClass.heisenburg ();
}
}
package Helperlib;
public class MyClass
{
public MyClass() {}
public void heisenburg ()
{
System.out.println("Say my name!");
}
}
<project default="run">
<target name="build_helper">
<javac srcdir="Helperlib/" includeantruntime="false" />
</target>
<target name="compile" depends="build_helper">
<javac srcdir="Chapter02/Question1/" includeantruntime="false" />
</target>
<target name="run" depends="compile">
<java classname="Chapter02.Question1.MyClassTryingToImport" />
</target>
</project>
这里要注意的第一件事(你发布的示例缺失)是,如果你要将java类放在相对目录结构中,那么所有文件都需要有一个与它们所在的文件夹相匹配的包声明in,或者java运行时无法找到类。
示例build.xml
文件包含三个目标;一个用于编译辅助代码,一个用于编译使用帮助程序代码的类,另一个用于实际运行程序。
设置依赖项,以便默认情况下ant想要run
您的代码,但要做到这一点,它需要先compile
它,并且在它可以做之前它需要{{1获取辅助代码。
假设你安装了build_helper
,并且它在路径中(即你可以打开一个全新的终端,输入ant
而不会收到错误),你应该可以按下构建密钥并在输出面板中看到类似的内容:
ant -version
作为一个“正确的”构建系统,Buildfile: /home/tmartin/OuterDirectory/build.xml
build_helper:
[javac] Compiling 1 source file
compile:
[javac] Compiling 1 source file
run:
[java] I'm the one who knocks!
[java] Say my name!
BUILD SUCCESSFUL
Total time: 0 seconds
[Finished in 0.7s]
对于构建事物非常聪明;除非他们的类文件丢失或者源代码更新,否则不会编译东西,所以你不要浪费时间编译那些没有改变的东西。
ant
的位置很重要;如果您使用的是build.xml
文件,或者第一个打开的文件夹(即侧边栏中列出的顶部文件夹),则需要将其存储在与sublime-project
文件相同的文件夹中。为了改变其工作方式,您需要首先自定义构建文件。
另请注意,这可能不是ant
构建系统的最佳示例,并且还有其他工具可用于执行此操作,但Sublime不直接支持它们并且您需要创建一个自定义构建来使用它们。