Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从shell编译和执行Java应用程序的约定?_Java_Javac - Fatal编程技术网

从shell编译和执行Java应用程序的约定?

从shell编译和执行Java应用程序的约定?,java,javac,Java,Javac,从shell编译和执行Java应用程序时遵循的约定是什么?作为一个特定的用例,我正在教一些孩子如何阅读Java源代码,并选择了Notch的Ludum Dare 22 entry的注释版本。这对他们来说是非常令人兴奋的,但我已经离开Java领域大约10年了,坦率地说,我想在开始使用Eclipse等之前,同时教他们如何使用shell和不太健壮的ie、非IDE编辑器。我想了解: 您将执行什么shell命令来编译和运行应用程序,以及从哪个项目文件夹;即miniventure或miniventure/sr

从shell编译和执行Java应用程序时遵循的约定是什么?作为一个特定的用例,我正在教一些孩子如何阅读Java源代码,并选择了Notch的Ludum Dare 22 entry的注释版本。这对他们来说是非常令人兴奋的,但我已经离开Java领域大约10年了,坦率地说,我想在开始使用Eclipse等之前,同时教他们如何使用shell和不太健壮的ie、非IDE编辑器。我想了解:

您将执行什么shell命令来编译和运行应用程序,以及从哪个项目文件夹;即miniventure或miniventure/src或miniventure/src/com/mojang/ld22和


B当从src挖掘其他类似的项目时,了解如何编写项目以及shell java和javac参数以供将来参考时,遵循的基本原理是什么?

鉴于仅在命令shell中工作的限制,处理编译的最佳方法是从类路径的根运行javac,就在包含您为源代码定义的顶级包的目录中,在您的示例中它可能是miniventure/src。您只需运行javac并使用-cp classpath命令行参数来定义类路径的根。因为您正在教授新的程序员,所以您可以使用相同选项的长形式,-classpath来强调他们正在设置Java类路径

如果从类路径的根运行javac,通常只使用一个点来引用同一个目录:javac-cp。;因为javac将遍历目录包结构来查找所有源文件,任何具有.java文件扩展名的文件都可以,但是javac的文档推荐一种更结构化的方法:

有两种方法可以将源代码文件名传递给javac: 对于少量源文件,只需在命令行上列出文件名即可。对于大量源文件,请在文件中列出文件名,并用空格或换行符分隔。然后在javac命令行上使用列表文件名,前面加一个@字符。 如果您以这种方式运行javac,它将把类文件放在源文件旁边,但是这些类文件都与源文件混合在一起,并且可能分散在目录/包结构中。处理这个问题的习惯方法是使用javac-d命令行参数,它定义了编译类应该写入的目录;javac将保留包结构,并在编译期间创建任何必要的目录结构。定义此选项的标准方法始终是一个名为:classes的目录,它是案例目录中源或src的同级目录。因此,您将创建一个新目录:miniventure/classes,然后您的命令行将包括:-d./classes

由于您正在教授新的程序员,您将希望在编译期间包含调试信息,因此当他们遇到错误或异常时,堆栈跟踪将包含详细的调试信息。javac命令行选项是:-g,它将在所有调试选项打开的情况下生成类文件;这将包括以下调试选项:

source(包括源文件调试信息)Lines(包括源文件调试信息中的行号)和Vars(包括本地变量调试信息) 最后,由于让新程序员详细查看所有内容可能会有所帮助,因此您可能希望包含-verbose选项,它告诉javac输出非常详细的消息,包括加载的每个类和编译的每个源代码文件

因此,将所有这些放在一起,您的javac命令行将如下所示:

javac -classpath . -d ./classes -g -verbose

我没有在命令行中列出每个源代码文件的选项,也没有使用@参数引用包含文件名列表的文件。我个人从未使用过这个选项,我想这感觉有点过于复杂了。希望这对您有所帮助-

考虑到只在命令shell中工作的限制,处理编译的最佳方法是从类路径的根目录运行javac,该目录包含您为源代码定义的顶级包,在您的情况下可能是miniventure/src。您只需运行javac并使用-cp classpath命令行参数来定义类路径的根。因为您正在教授新的程序员,所以您可以使用相同选项的长形式,-classpath来强调他们正在设置Java类路径

如果从类路径的根运行javac,通常只使用一个点来引用同一个目录:javac-cp。;因为javac将遍历目录包结构来查找所有源文件,只要有.java文件n ame扩展,但javac文档建议采用更结构化的方法:

有两种方法可以将源代码文件名传递给javac: 对于少量源文件,只需在命令行上列出文件名即可。对于大量源文件,请在文件中列出文件名,并用空格或换行符分隔。然后在javac命令行上使用列表文件名,前面加一个@字符。 如果您以这种方式运行javac,它将把类文件放在源文件旁边,但是这些类文件都与源文件混合在一起,并且可能分散在目录/包结构中。处理这个问题的习惯方法是使用javac-d命令行参数,它定义了编译类应该写入的目录;javac将保留包结构,并在编译期间创建任何必要的目录结构。定义此选项的标准方法始终是一个名为:classes的目录,它是案例目录中源或src的同级目录。因此,您将创建一个新目录:miniventure/classes,然后您的命令行将包括:-d./classes

由于您正在教授新的程序员,您将希望在编译期间包含调试信息,因此当他们遇到错误或异常时,堆栈跟踪将包含详细的调试信息。javac命令行选项是:-g,它将在所有调试选项打开的情况下生成类文件;这将包括以下调试选项:

source(包括源文件调试信息)Lines(包括源文件调试信息中的行号)和Vars(包括本地变量调试信息) 最后,由于让新程序员详细查看所有内容可能会有所帮助,因此您可能希望包含-verbose选项,它告诉javac输出非常详细的消息,包括加载的每个类和编译的每个源代码文件

因此,将所有这些放在一起,您的javac命令行将如下所示:

javac -classpath . -d ./classes -g -verbose

我没有在命令行中列出每个源代码文件的选项,也没有使用@参数引用包含文件名列表的文件。我个人从未使用过这个选项,我想这感觉有点过于复杂了。希望这会有所帮助-

非常感谢您为这个答案所付出的努力!非常感谢你对解释它的兴趣。我将进一步深入探讨这一点,因为我认为这是一个好方法。如果将其与ant、maven,尤其是像gradle这样的新一代构建工具进行比较,这是最好的方法吗?这可能是最简单的解释和理解,但最好的?每次都使用javac当然也不是惯例。@eis考虑到OP希望从shell开始运行,我提供了我的想法,在这些约束条件下,什么是最好的工作方式。当我开始用Java编程时,这是它唯一的工作方式;虽然我们有make命令行构建实用程序,但是Java、Ant等的IDE并不存在。当然,我每天都在工作中使用IDE、Ant或Maven、Jenkins、Nexus等,但这不是问题的背景。如果你在问题的上下文中阅读我的答案,很明显我没有对编译Java代码的最佳方式做一个一般性的陈述。@SeanMickey好吧,我的观点是,这确实不明显。考虑到问题中所表达的局限性,我想补充一句,最好的方式可能是在第一句话中加上或类似的内容,因为否则,我真的不知道这是什么最好的方式。我认为,考虑到使用javac的约束条件,这几乎是唯一可能的,因此将其称为最糟糕的选项也是同样正确的。我在回答的第一句话中添加了“只在命令shell中工作”这句话,澄清我回答的范围,解决@eis提出的问题,避免争论性评论污染。非常感谢您在回答中付出的努力!非常感谢你对解释它的兴趣。我将进一步深入探讨这一点,因为我认为这是一个好方法。如果将其与ant、maven,尤其是像gradle这样的新一代构建工具进行比较,这是最好的方法吗?这可能是最简单的解释和理解,但最好的?每次都使用javac当然也不是惯例。@eis考虑到OP希望从shell开始运行,我提供了我的想法,在这些约束条件下,什么是最好的工作方式。当我开始用Java编程时,这是它唯一的工作方式;虽然我们有make命令行构建实用程序,但是Java、Ant等的IDE并不存在。当然,我每天都在工作中使用IDE、Ant或Maven、Jenkins、Nexus等,但这不是问题的背景。如果你把我的答案和问题联系起来看,很明显我是对的
“我并没有对编译Java代码的最佳方式做一个笼统的陈述。@SeanMickey好吧,我的意见是,这真的不明显。考虑到问题中所表达的局限性,我想补充一句,最好的方式可能是在第一句话中加上或类似的内容,因为否则,我真的不知道这是什么最好的方式。我认为,考虑到使用javac的约束条件,这几乎是唯一可能的,因此将其称为最糟糕的选项也是同样正确的。我在回答的第一句话中添加了“只在命令shell中工作”这句话,为了澄清我的回答范围,解决@eis提出的问题,避免争论性评论污染@Yluminate,我将在本周末的某个时候看一看。我有很多事情要做,所以不确定什么时候,但没什么大不了的-@SeanMickey非常感谢。@ylluminate我会在这个周末的某个时候看一看。我有很多事情要做,所以不确定什么时候,但没什么大不了的,@SeanMickey非常感谢。