【弃】Maven

乱七八糟,浪费我两个小时

1 Maven的简介

1.1 简介

Maven 【['mevan]】这个词可以翻译为"专家","内行"。作为Apache组织中的一个颇为成功的开源项目,Maven主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。

无论是小型的开源类库项目,还是大型的企业级应用;无论是传统的瀑布式开发,还是流行的敏捷开发,Maven都能大显身手。

1.2 项目构建

不管你是否意识到,构建(build)是每一位程序员每天都在做的工作。早上来到公司,我们做的第一件事就是从源码库签出最新的代码,然后进行单元测试,如果测试失败,会找相关的同事一起调试,修复错误代码。接着回到自己的工作上来。编写自己的单元测试及产品代码。

仔细总结一下,我们会发现,除了编写源代码,我们每天有相当一部分时间花在了编译,运行单元测试,生成文档,打包和部署等繁琐且不起眼的工作上,这就是构建。如果我们现在还手工这样做,那成本也太高了,于是有人用软件的方法让这一系列工作完全自动化,使得软件的构建可以像全自动流水线一样,只需要一条简单的命令,所有繁琐的步骤都能够自动完成,很快就能得到最终结果。

1.3 项目构建工具

Ant构建

最早的构建工具,基于IDE,大概是2000年有的,当时是最流行java构建工具,不过它的XML脚本编写格式让XML文件特别大。对工程构建过程中的过程控制特别好

Maven 【JAVA]

项目对象模型,通过其描述信息来管理项目的构建,报告和文档的软件项目管理工具。它填补了Ant缺点,Maven第一次支持了从网络上下载的功能,仍然采用xml作为配置文件格式。Maven专注的是依赖管理,使用Java编写。

Gradle

属于结合以上两个的优点,它继承了Ant的灵活和Maven的生命周期管理,它最后被google作为了Android御用管理工具。它最大的区别是不用XML作为配置文件格式,采用了DSL格式,使得脚本更加简洁。

目前市面上Ant比较老,所以一般是一些比较传统的软件企业公司使用,Maven使用Java编写,是当下大多数互联网公司会使用的一个构建工具,中文文档也比较齐全, gradle是用groovy编写,目前比较新型的构建工具一些初创互联网公司会使用,以后会有很大的使用空间.

1.4.Maven的四大特性

1.4.1.依赖管理系统

Maven为Java世界引入了一个新的依赖管理系统jar包管理 jar升级时修改配置文件即可。在Java世界中,可以用groupld、artifactld、version组成的Coordination(坐标)唯一标识一个依赖。

任何基于Maven构建的项目自身也必须定义这三项属性,生成的包可以是Jar包,也可以是war包或者jar包。

一个典型的依赖引用如下所示:

<dependency>
    <groupId>javax.servlet</groupId>    com.baidu
    <artifactid>javax.servlet-api</artifactId>    ueditor echarts
    <version>3.1.0</version>
</dependency>

坐标属性的理解

Maven坐标为各种组件引入了秩序,任何一个组件都必须明确定义自己的坐标。

groupld

定义当前Maven项目隶属的实际项目-公司名称。(jar包所在仓库路径)由于Maven中模块的概念,因此一个实际项目往往会被划分为很多模块。比如spring是一个实际项目,其对应的Maven模块会有很多,如spring-core,spring-webmvc等。

artifactld

该元素定义实际项目中的一个Maven模块-项目名,推荐的做法是使用实际项目名称作为artifactld的前缀.比如: spring-bean, spring-webmvc等。

version

该元素定义Maven项目当前所处的版本。

1.4.2.多模块构建

项目复查时dao service controller层分离将一个项目分解为多个模块已经是很通用的一种方式。

在Maven中需要定义一个parent POM作为一组module的聚合POM。在该POM中可以使用<modules>标签来定义一组子模块。parent POM不会有什么实际构建产出。而parent POM中的build配置以及依赖配置都会自动继承给子module。

1.4.3.一致的项目结构

Ant时代大家创建Java项目目录时比较随意,然后通过Ant配置指定哪些属于source,那些属于testSource等。而Maven在设计之初的理念就是Conversion over configuration(约定大于配置)。其制定了一套项目目录结构作为标准的Java项目结构,解决不同ide带来的文件目录不一致问题。

1.4.4.一致的构建模型和插件机制

<plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>maven-jetty-plugin</artifactId>
    <version>6.1.25</version>
    <configuration>
        <scanIntervalseconds>10</scanInterva1seconds>
        <contextPath>/test</contextPath>
    </configuration>
</plugin>

2 Maven的安装配置和目录结构工

2.1 Maven的安装配置

2.1.1 检查JDK的版本

JDK版本1.7及以上版本

2.1.2 下载Maven

下载地址: http://maven.apache.org/download.html

2.1.3 配置Maven环境变量

解压后把Maven的根目录配置到系统环境变量中MAVEN_HOME,将bin目录配置到path变量中注: maven解压后存放的目录不要包含中文和空格

2.1.4 检查Maven是否安装成功

打开dos窗口,执行mvn -v

2.2 认识Maven目录结构

2.2.1 Maven项目目录结构

目录

目的

${bassdir}

存放pom.xml和所有的子目录

${bassdir}/src/main/java

项目的Java源代码

${bassdir}/src/main/resources

项目的资源,比如说property文件

${bassdir}/src/test/java

项目的测试类,比如说JUnity代码

${bassdir}/src/test/resources

测试使用的资源

2.2.1 创建一个文件夹作为项目的根目录

在根目录中创建一个pom.xml文件,内容如下

<?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.apche.org/POM/4.0.0             http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>com.company1</groupId>
<artifactId>maven01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>maven01</name>
<url>http://maven.apache.org</url>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>

</project>
什么含义看maven-pom.xml

Ps:标签定义解释

根目录下的第一个子元素Mode1version指定当前Pom模型的版本,对于Maven3来说,它只能是4.0.0。指定了当前Maven模型的版本号,对于Maven2和Maven3来说,它只能是4.0.0

groupId定义了项目属于哪个组,这个组往往和项目所在的组织和公司存在关联。
比如:com. xxxx

artifactId定义了当前Maven项目在组中唯一的ID.

version x.x.x-里程碑
比如: 1.0.0-SNAPSHOT
第一个x 大版本有重大变革
第二个x 小版本修复bug,增加功能
第三个x 更新

里程碑版本:
SNAPSHOT(快照,开发版)
alpha(内部测试)
beta(公开测试)
Release 1 RC(发布版)
GA(正常版本)

使用name标签声明一个对于用户更为友好的项目名称,虽然不是必须的,但还是推荐为每个Pom声明name,以方便信息交流。

2.2.2 编写主函数工

package com.xxxx.demo;
    public class He11o{
        public static void main(string[]args){
            system.out.println("he11o maven");
}

2.2.3 cmd下编译并运行

cmd下面,进入项目的根目录

  1. 编译java文件

mvn compile

2. 执行main方法

mvn exec:java -Dexec.mainClass="com.xxxx.demo.Hello”"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值