标签:调用 声明 标识 复杂 snapshot 场景 软件包 span 结构
请注意,撰写本文时最新的Maven版本是Maven 3.6.3。
尽管Maven是最受欢迎的工具,但它并不是Java生态系统中唯一的构建工具。 Ant是较早的基于XML的配置工具,它缺乏Maven的标准化,基于约定的实践和依赖管理,但是确实提供了Maven所没有的灵活性。 Gradle是一种较新的工具,可在Maven生态系统之上运行(使用Maven的存储库),但支持使用基于Groovy或Kotlin的DSL进行配置。 这三个都是独立的好构建工具,每个都可以集成到CI / CD流程中。 重要的是为你的需求选择合适的,并知道如何正确使用它。
像许多出色的工具一样,Maven可以将曾经过于复杂的内容(配置地狱)简化为易于消化的部分。 Maven包含三个组件:
Maven POM:每个使用Maven的Java项目在其根目录中都有一个POM(项目对象模型)文件。 pom.xml描述了项目的依赖关系,并告诉你如何构建它。 (依赖关系是项目所需的第三方软件。一些常见的示例是JUnit和JDBC。有关所有可用工具和流行依赖关系的列表,请参见Maven中央存储库。)
Maven目录:Maven目录实现了所谓的基于配置的约定,这是对配置地狱的优雅解决方案。 Maven不需要开发人员为每个新项目定义布局和手动配置组件(makefile和Ant就是这种情况),而是建立了通用的项目结构并提供了描述其工作方式的标准文件格式。你只需插入需求,Maven就会调用依赖项并为你配置项目。
集中式存储库:最后,Maven使用集中式存储库来发现和发布作为依赖项的项目包。当你在项目中引用依赖项时,Maven会在集中式存储库中发现它,将其下载到本地存储库,然后将其安装到你的项目中。在大多数情况下,作为开发人员,所有这些都不可见。
访问Maven依赖项
默认情况下,Maven从Maven中央存储库解析依赖关系。一个常见的替代方案是JCenter,它具有更多可用软件包集。组织还发布和托管内部存储库,这些存储库可以是公共的或私有的。为了访问存储库,你可以在Maven POM中指定其URL,也可以指示Maven在其他存储库中查找。
设置Java开发环境后,只需几个步骤即可安装Maven:
1.下载最新的Maven版本(截至撰写本文时,Maven 3.6.3)。
2.将apache.maven.zip文件解压缩到方便的位置。
3.将该文件放在路径上。 例如,在Unix或Linux系统上:export PATH = $ PATH:/ home / maven /。
你现在应该可以访问mvn命令了。 键入mvn -v以确保已成功安装Maven。
每个Maven项目的根目录都是pom.xml文件。 尽管XML以其乏味而著称,但在此用例中,XML实际上效果很好。 Maven的POM易于阅读,并揭示了项目中正在发生的许多事情。 (如果你使用过JavaScript,则pom.xml的用途类似于Node NPM的package.json文件。)
清单1显示了一个非常简单的Maven pom.xml。
1 <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 2 3 <modelVersion>4.0.0</modelVersion> 4 5 <groupId>com.javaworld</groupId> 6 7 <artifactId>what-is-maven</artifactId> 8 9 <version>1.0-SNAPSHOT</version> 10 11 <name>Simple Maven Project</name> 12 13 <packaging>jar</packaging> 14 15 16 17 <dependencies> 18 19 <dependency> 20 21 <groupId>junit</groupId> 22 23 <artifactId>junit</artifactId> 24 25 <version>4.12</version> 26 27 <scope>test</scope> 28 29 </dependency> 30 31 </dependencies></project>
无论你是描述自己的项目还是项目依赖项,这些值始终告诉Maven在Maven存储库中找到项目的位置以及可以使用的版本。
请记住,POM定义了项目需要运行的所有内容,但同时也将项目描述为潜在的依赖项。 如果你要构建一个将成为依赖项的项目(例如,创建供其他项目使用的库),则需要通过以下四种方式之一使它可用:
在第一种情况下,根本不使用远程存储库。 相反,其他开发人员将使用mvn install命令将你的项目本地下载并安装到其Maven存储库中。
在第二种情况下,你使用托管的Maven存储库,使用私有控制的服务器发布和下载依赖项。 为此,你需要一个仓库管理器,例如Apache Archiva。
较新的替代方法是使用私有远程存储库,但依靠基于云的服务来管理它,例如Cloudsmith。 这带来了远程托管的依赖项的好处,而无需建立回购服务器。 当然,这项服务是收费的。
最后,一小部分项目将最终存储在Central Maven存储库或JCenter中,这些存储库旨在用于广泛使用的公共软件包。 如果要创建供其他人使用的开源依赖项,则需要这些集中存储库之一才能使你的工作对全世界可用。
对于第一个命令,请尝试执行mvn软件包。 即使你还没有任何源代码,执行此命令也会告诉Maven下载JUnit依赖项。 你可以检查Maven的日志记录输出以查看依赖项是否已加载。
你可能已经注意到示例POM中的JUnit依赖项被标记为作用域测试。 范围是依赖管理中的一个重要概念,从本质上讲,你可以定义和限制在项目中如何调用和使用每个依赖。 测试范围确保运行测试时依赖项可用,但打包应用程序进行部署时不提供依赖项。
提供了另一个常见的作用域,它告诉框架依赖项是由运行时环境提供的。 部署到Servlet容器时,通常会在Servlet JARS中看到这种情况,因为该容器将提供那些JARS。 请参阅Apache Maven文档以获取Maven依赖范围的完整列表。
完成命令后,请注意Maven已创建一个/ target目录。 这是项目输出的标准位置。 你下载的依赖项将与已编译的应用程序工件一起位于/ target目录中。
接下来,你要添加一个Java文件,该文件将放置在Maven src /目录中。 使用清单2的内容创建一个/src/main/java/com/javaworld/Hello.java文件。
1 com.javaworld 2 3 public class Hello { 4 5 public static void main(String[] args){ 6 7 System.out.println("Hello, JavaWorld"); 8 9 }}
/ src路径是项目源文件的标准位置。 大多数项目将其主文件放在/ src / main /中,而Java文件则放在/ java下的类路径中。 此外,如果要包括非代码资产,例如配置文件或映像,则可以使用/ src / main / resources。 此路径中的资产将添加到主类路径。 测试文件进入/ src / test / java。
作为回顾,以下是Maven项目结构的一些关键部分(由Maven标准目录结构定义):
pom.xml |
项目描述符文件 |
/src/main/java |
源文件的位置 |
/src/main/resources |
非来源资产的位置 |
/src/test/java |
测试源文件的位置 |
/target |
构建输出的位置 |
捆绑项目后,你可能需要发布mvn安装。 此命令将项目推送到本地Maven存储库中。 将其放入本地存储库后,即可用于本地系统中的其他Maven项目。 这对于你和/或你的团队正在创建尚未发布到中央存储库的依赖项JAR的开发场景很有用。
准备编译项目的类文件时,输入mvn compile。 如果你正在运行热部署设置,则此命令将触发热部署类加载器。 (诸如Spring Boot的mvn spring-boot:runcommand之类的热部署工具将监视类文件中的更改,并且编译将导致你的源文件被编译,正在运行的应用程序将反映这些更改。)
与Maven配合良好的Spring框架提供了附加的,复杂的功能,可用于暂存新项目。例如,Spring Initializr是一个工具,可让你非常快速地在新应用中定义所需的元素。 Initializr本质上不是Maven原型,但其目的相同,即基于前期规范生成项目布局。在Initializr中,你可以键入mvn archetype:generate并浏览选项以找到适合你所构建内容的原型。
1 <dependency> 2 3 <groupId>org.apache.commons</groupId> 4 5 <artifactId>commons-lang3</artifactId> 6 7 <version>3.0</version></dependency>
查找依赖关系也很容易。 为此,你只需在网络浏览器中键入“ maven stringutils”,它就会显示出来。 或者你可以直接搜索Central Maven存储库。 当你在项目主页或其他资源上阅读依赖时,你可能还会找到所需依赖的链接。 只需剪切并粘贴URL,并确保记下正确的版本号,就可以了。
Maven之所以如此常用是因为它运行良好并且足够成熟,可以处理你向它扔的任何东西。 了解Maven并将其用作项目的基础可释放Java生态系统中为你提供的大量功能。 要想尽一切可能,请考虑签出这些项目中的任何一个,这些项目都可以通过Maven核心插件进行访问。
maven-sure fire-插件 |
在专用类加载器中运行单元测试。 |
春季启动maven插件 |
允许通过弹簧启动运行弹簧应用程序:运行。 |
maven-部署-插件 |
用于将包发布到远程存储库中。 |
maven-汇编-插件 |
允许构建fat或uber JARs,也就是说,JAR文件包含一个文件中的所有相关性和资产,能够按原样运行。 |
maven-shade-插件 |
允许构建一个胖JAR,允许删除未使用的文件,或者重命名冲突的文件。 |
> 喜欢这篇文章的可以点个赞,欢迎大家留言评论,记得关注我,每天持续更新技术干货、职场趣事、海量面试资料等等
> 如果你对java技术很感兴趣也可以交流学习,共同学习进步。
> 不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代
文章写道这里,欢迎完善交流。最后奉上近期整理出来的一套完整的java架构思维导图,分享给大家对照知识点参考学习。有更多JVM、Mysql、Tomcat、Spring Boot、Spring Cloud、Zookeeper、Kafka、RabbitMQ、RockerMQ、Redis、ELK、Git等Java干货
什么是Maven? 使用Apache Maven构建和依赖项管理
标签:调用 声明 标识 复杂 snapshot 场景 软件包 span 结构
原文地址:https://www.cnblogs.com/youruike1/p/12331153.html