在sublime文本中导入自定义java包3

时间:2018-01-26 18:50:05

标签: java eclipse import sublimetext3 importerror

我正在尝试在崇高文本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,而是提供解决方案。 提前致谢!

1 个答案:

答案 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

相关文件的内容:

MyClassTryingToImport.java

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 ();
    }
}

MyClass.java

package Helperlib;

public class MyClass
{
    public MyClass() {}

    public void heisenburg ()
    {
        System.out.println("Say my name!");
    }
}

的build.xml

<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不直接支持它们并且您需要创建一个自定义构建来使用它们。