【问题标题】:Easy command line Java compile简单的命令行Java编译
【发布时间】:2011-01-27 21:59:44
【问题描述】:

所以我必须将一个 java 项目发送给我们公司以外没有 java 经验的人,他们需要编译它。有没有一种简单的方法可以在不需要写出文件列表的 Windows 命令行上执行此操作?

我个人认为javac应该足够聪明来处理

javac *

当位于包层次结构根目录下的文件夹中时。这个球场有什么东西吗?

编辑:源文件夹结构很复杂,并且不是单一的条目类,所以到目前为止提到的一些想法是行不通的。不过谢谢!深入思考 9 个级别,包含多个级别的代码。

【问题讨论】:

  • 如果他们不会使用Java,谁不给他们已经编译好的版本?

标签: java command-line compilation


【解决方案1】:

从代表包层次结构基础的文件夹中,假设您的入口点类名为 Main,在名为 app 的包中,

javac -classpath . app/Main.java

应该生成正确的类定义。编译器将找出依赖关系并编译任何其他需要的类。类文件将出现在与其源文件相同的目录中。

如您所说,如果您有“多个条目”类,则您至少必须从依赖层次结构中识别所有那些顶级类,这些类可以作为 javac 的进一步参数列出,将包指定为它们发生。像这样,假设你也需要从 other.Entry 开始

javac -classpath . app/Main.java other/Entry.java 

请注意,无论您是创建 ant 脚本还是以这种方式创建,您仍然需要弄清楚您的哪些类是独立依赖层次结构的顶层。

【讨论】:

    【解决方案2】:

    为他们提供一个 Ant 脚本,该脚本使用类路径上的正确库等进行构建。该脚本还可以执行其他任务,例如构建 JAR 等。

    这要求那个人下载并安装 Ant,但这并不难。 (并且没有什么可以阻止您为他们提供合适的 Ant 发行版进行安装。或者甚至向他们发送一个发行版 ZIP 文件,该文件在树中“预安装”了 Ant 的副本。)

    提供 Ant 脚本意味着您可以避免他们陷入 Java 新手陷阱,例如忘记设置类路径、在错误的目录中、忘记重新编译依赖文件等。另外,它更“专业”。

    【讨论】:

      【解决方案3】:

      javac BaseProgram.java 将从当前目录编译 BaseProgram.java,以及它引用的所有在源代码中可用的类,位于同一目录树中。

      如果 BaseProgram 引用 Class1 和 Class2,并且它们在同一目录下的 Class1.java 和 Class2.java 中可用,那么它们也将被编译。同样,如果它们在一个包中,并且包目录可用,它们将被编译。

      【讨论】:

        【解决方案4】:

        您可以构建一个文件,列出您要编译的所有类(从 javac 手册页中提取)-

        示例 - 两个 Arg 文件 您可以创建两个参数文件——一个用于 javac 选项,另一个用于 另一个用于源文件- 名称:(请注意以下列表没有续行 字符。)

           Create a file named options containing:
        
                  -d classes
                  -g
                  -sourcepath /java/pubs/ws/1.3/src/share/classes
        
           Create a file named classes containing:
        
                  MyClass1.java
                  MyClass2.java
                  MyClass3.java
        
           You would then run javac with:
        
                  % javac @options @classes
        

        或者您可以在命令行中使用 *.java,例如

        javac greetings/*.java
        

        (再次来自 ma​​n javac

        或者您为什么不直接将源代码编译到一个 jar 中,您的客户可以使用他们的 JRE 运行 - 特别是考虑到他们不精通 Java?

        【讨论】:

          【解决方案5】:

          一个简单的方法是使用:

          javac *.java.
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-12-26
            • 1970-01-01
            • 2012-02-24
            • 2014-11-07
            • 1970-01-01
            • 1970-01-01
            • 2011-05-03
            • 1970-01-01
            相关资源
            最近更新 更多