我一直在研究在开发过程中使用 Ivy 组合的Web应用程序项目和一组shell脚本,以便在运行时使用java可执行文件手动启动应用程序并指定硬编码的类路径。主要来自.NET / NuGet背景,并且拥有一些其他软件包管理器(如NPM,Ruby Gems,Rust货物)的经验,我想知道Java的相同命令行工具在哪里。我一直在使用java -jar ivy.jar
,但似乎只是全局解析/安装依赖项,如何构建,运行并最终发布应用程序?
除了工具之外,我还想知道手动调整类路径是否是Java中的常规业务,或者是否存在以与其他依赖性管理器更面向图形的方式设置依赖关系的最佳实践。我觉得我在这里错过了一些明显的解决方案,但我对这个主题的搜索并没有让人感到安心。最终,我想要一个合理的解决方案,使用代码/配置制定,以便任何开发人员都可以选择它,以便在需要时可以完全在eclipse之外运行。
答案 0 :(得分:3)
你在搜索中看过Maven吗?
它填充了包管理方面以及其他一些方面,例如构建,测试。 https://maven.apache.org/
答案 1 :(得分:2)
在构建时,有Maven和Gradle等工具。这些允许您的依赖项,并且该工具构建依赖关系图以确定所需的传递依赖项。 Maven和Gradle都代表了有向无环图中的依赖关系,但Maven的DAG比Gradle更受限制。 Maven是非常声明的,用XML指定,是我们的方式或高速公路。 Gradle非常灵活,构建脚本指定为Groovy程序。这是feature-by-feature比较(偏向Gradle)。
就Maven而言,你所要做的就是:
mvn clean install
如果要显示依赖关系图:
mvn dependency:tree
在运行时,它是一个不同的故事。
通常,Java应用程序捆绑到WAR或EAR文件中。这些是美化的ZIP文件,包含应用程序及其所有依赖项。 WAR文件如下所示,解压缩:
+-+ WEB-INF
| |
| +-- classes
| | \_ application specific classes
| +-- lib
| | \_ bundled JAR files for required dependencies
| +-- web.xml
| \_ main web application configuration
+-- ... web assets
WAR和EAR文件部署到应用程序服务器(Tomcat,JBoss等)上,它管理应用程序之间的共享依赖关系。
在应用程序服务器之外,它有点棘手。最简单的方法是将应用程序安装为可执行的JAR文件,并在其旁边安装所有依赖项。 JAR文件可以包含一个"MAINFEST.MF"文件,列出所有依赖的JAR。像Maven这样的构建工具会自动配置JAR以引用其依赖项,并将应用程序及其依赖项打包到ZIP文件中(请参阅Maven assembly plugin)。
另一种方法是所谓的" fat-JAR"或者" uber-JAR"这是一个包含其他JAR或主JAR的JAR,只是具有依赖JAR的爆炸内容(参见Maven shade plugin)。
最后,还有OSGi,它在运行时管理依赖关系。 OSGi是一个开放标准,由Apache Felix或Eclipse Equinox等容器实现。以下是如何设置Eclipse Equinox应用程序的想法。您将应用程序开发为"插件"进入其中一个框架。但是,作为一个很好的好处,您可以管理多个版本的依赖项,甚至可以自动更新。