几周前,我在工作中接手了一个使用 Eclipse 编写的基于 Java 的后端 Web 应用程序。该应用程序的本质是它无法在本地进行充分测试,而是需要在我们的测试网络上测试更改(这涉及将更改推送到我们通过 SSH 连接的 AWS Micro 服务器)。
到目前为止,我以与前任相同的方式推送更改:使用 Eclipse 的 Export to Runnable JAR File 选项编译程序,然后将 jar scp 到远程服务器并运行它。然而,这个过程有一个巨大的问题。虽然编译只需要几秒钟,但 jar 远远超过 30MB,通过我们相当普通的互联网连接将整个东西从办公室推送到远程服务器需要 10 多分钟。如果我今天过得特别糟糕,比如说,在代码中引入了几个小错误,然后一个一个地发现它们,我很容易最终失去一个小时或更多的时间,一边把整个罐子推过去一边玩弄我的拇指,然后结束了一系列的单行更改。
显然,比每次更改都对整个 jar 进行 scp 更明智的解决方案是简单地从源代码管理中远程仅提取更改的 .java 文件,然后完全远程编译新版本。然而,我对 Java 还是很陌生(实际上是一般的编程),我所有的 Java 工作都在我在开发过程中接管的现有 Eclipse 项目上。因此,我对编译 Java 知之甚少,我发现网上有关此的教程大多不透明或完全无法解决如何编译使用外部库的代码的问题。
我将在这里关联我可以从 Eclipse 中找到的有关项目依赖项的哪些信息,我的问题是:我需要将什么复制到远程服务器,以及我需要把它放在哪里,以便能够远程编译?我需要在远程服务器上安装哪些工具(如果有)才能在那里编译?一旦我完成了所有设置,我实际上在命令行中输入了什么来编译它?
无论如何,这就是我所知道的依赖项和目录结构(我已经匿名了我们的应用程序名称,称它为“bunnies”):
应用程序源代码位于 bunnies/src
我们编译成bunnies/bin/main.jar
bunnies/dependencies 包含我们使用的三个外部库。
右键单击 Eclipse 中的项目,转到 Java Build Path 部分,然后选择 Libraries 选项卡,我看到了
- 上面的三个库(以形式出现,例如“json-simple-1.1.1.jar - /home/mark/workspace/bunnies/dependencies”)
- 另一个位置的第四个 jar 文件(“M2_REPO/com/google/guava/guava/r09/guava-r09.jar - /home/mark/.m2/repository/com/google/guava/guava/r09/guava-r09 。罐”)
- JRE 系统库 [java-6-openjdk-i386]
但还有更多!我们还使用了两个库,mahout-core 和 mahout-integration,它们作为单独的项目包含在同一个工作区中,而不是作为依赖项文件夹中的 jar 文件。它们按名称显示在 bunnies 项目的 Java 构建路径部分的项目选项卡上,分别位于 /home/mark/workspace/mahout-core 和 /home/mark/workspace/mahout-integration。
由于我不是 Java 高手,也许我还缺少一些其他隐藏的依赖项,这些依赖项没有出现在我迄今为止看过的任何地方?
如果有人可以引导我完成从命令行编译这个巨大混乱的步骤,而无需使用 Eclipse 中的 Export 选项,以便我最终可以远程编译它,我将不胜感激。