maven项目构建

Maven是apache的一个开源项目。是一个用来把源代码构建成可发布的构件的工具。

Maven的功能非常强大,可以认为是一个项目管理工具,不仅仅是一个构建工具。

Maven本身的核心很小,但是可以在上面扩展出很多的插件。Mven采用的是插件的思想,通过插件的功能扩展出很多的功能。同时Maven采用约定大于配置的思想,在项目中采用了很多约定规则来减少配置。不想ant这样的构建工具需要很多的配置。作为一个项目构建工具,最重要的是管理项目的库和项目之间的依赖关系。

本文将以以下面的例子,来作为学习maven的一个过程。

假设要构建一个名为Content-Search的项目,该项目包含了三个子项目:contentSearch-dal,contentSearch-biz,contentSearch-web。项目采用Struts2、hibernate3、spring2.5的框架结合。使用mysql数据库。

contentSearch-web:Web层的代码, struts2+spring2.5结合的框架。

contentSearch-biz:业务逻辑层代码。

contentSearch-dal:数据持久层代码。

三个项目之间的依赖和对外部库的依赖关系大概如下:

 

 

 

 

作为从一个项目构建工具角度出发,maven主要要实现的就是项目的依赖的二方、三方库管理,项目之间的依赖管理。以及项目的整个生命周期的管理,包括编译(compile)、测试(test)、打包(packaging)、部署(install)等。

以以上为背景,先介绍下maven的基本概念:

依赖管理:对每个项目对外部的依赖的管理。

远程仓库:maven外部引用仓库的管理。

项目LifeCycle抽象和管理:项目生命周期编译、测试和打包等过程的抽象和管理。

 

  1. 1. Maven安装

http://maven.apache.org/download.html在上面根据不同的操作系统选择不同的安装版本。

安装后的目录结构如下:

bin/:maven脚本

boot/

conf/:全局的settings.xml。 如果需要自己定制可以覆盖.m2文件夹里的settings.xml文件。

lib/:有包含maven核心的jar文件

设置环境变量: M2_HOME=maven安装路径  Path: $M2_HOME/bin

 

 

  1. 2. Maven核心概念

groupId , artifactId, packaging, version:—— 以上4个是 Maven 的 坐 标(coordinates),它们唯一标识了一个项目。

groupId: 团体,公司,小组,组织,项目,或者其它团体。如contentSearch-web,contentSearch-dal,contentSearch-biz同属一个groupId。

artifactId:在 groupId 下的表示一个单独项目的唯一标识符。项目名称ID 。

packaging: 标识项目的类型,如jar,war等。

Version:版本号。

以文章开头的例子为例,contentSearch-web的坐标可以定义如下:

groupId: com.companyName.contentSearch

artifactId:contentSearch-web

packaging: war

Version:1.0。

而contentSearch-dal的坐标如下:

groupId: com.companyName.contentSearch

artifactId:contentSearch-dal

packaging: jar

Version:1.0。

在一个 Maven 仓库中,所有的东西存储在一个与 Maven 项目坐标十分匹配的目录结构中。

/groupId/artifactId/version/artifactId-version.packaging.

 

POM:项目抽象模型

这是maven非常核心的概念。Maven通过它来管理项目。每一个项目都有一个pom.xml文件,该文件定义了改项目的基本信息,依赖关系等,maven对项目的生命周期管理也是基于此文件。以contentSearch-dal为例,该项目的pom.xml定义如下(关于pom.xml里面各项的含义,本文不做过多介绍,相信看了基本都能清楚。):

<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">

         <modelVersion>4.0.0</modelVersion>

         <parent>

                   <groupId> com.companyName.contentSearch</groupId>

                   <artifactId>contentSearch</artifactId>

                   <version>1.0</version>

         </parent>

         <artifactId>contentSearch-dal</artifactId>

         <packaging>jar</packaging>

         <version>1.0</version>

         <name>contentSearch-dal</name>

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

         <dependencies>

                   <dependency>

                            <groupId>junit</groupId>

                            <artifactId>junit</artifactId>

                            <version>3.8.1</version>

                            <scope>test</scope>

                   </dependency>

                   <dependency>

                            <groupId>generalorm</groupId>

                            <artifactId>hibernate</artifactId>

                            <version>3.0</version>

                   </dependency>

                   <dependency>

                            <groupId>mysql</groupId>

                            <artifactId>mysql-connector-java</artifactId>

                            <version>5.1.6</version>

                   </dependency>

                   <dependency>

                            <groupId>log4j</groupId>

                            <artifactId>log4j</artifactId>

                            <version>1.2.14</version>

                   </dependency>

                   <dependency>

                            <groupId>dom4j</groupId>

                            <artifactId>dom4j</artifactId>

                            <version>1.6.1</version>

                   </dependency>

                   <dependency>

                            <groupId>slf4j</groupId>

                            <artifactId>slf4j-api</artifactId>

                            <version>1.5.8</version>

                   </dependency>

                   <dependency>

                            <groupId>slf4j</groupId>

                            <artifactId>slf4j-nop</artifactId>

                            <version>1.5.2</version>

                   </dependency>

                   <dependency>

                            <groupId>antlr</groupId>

                            <artifactId>antlr</artifactId>

                            <version>2.7.6</version>

                   </dependency>

                   <dependency>

                            <groupId>jta</groupId>

                            <artifactId>jta</artifactId>

                            <version>1.1</version>

                   </dependency>

                   <dependency>

                            <groupId>javassist</groupId>

                            <artifactId>javassist</artifactId>

                            <version>3.9.0.GA</version>

                   </dependency>

                   <dependency>

                            <groupId>commons-collections</groupId>

                            <artifactId>commons-collections</artifactId>

                            <version>3.1</version>

                   </dependency>

         </dependencies>

</project>

Repository

仓库,二方库,三方库的概念。每当安装完成maven之后就会有一个默认的本地仓库和远程仓库。本地仓库在用户工作目录下的.m2文件夹,如在linux下为/home/yblin/.m2。远程repository默认在settings.xml里面配置,如果要修改该文件必须在.m2文件夹下面替换一下即可。当进行编译的时候,maven会先查找本地Repository,如果本地Repository没有,会去取远程repository 。

 

 

  1. 3. Maven命令

创建一个项目:

mvn archetype:create -DgroupId=com.xxx.simple  - DartifactId =simple

archetype:create是一个goal,-DgroupId=org.sonatype.mavenbook.ch03代表要传到目标goal任务的参数,以-D开头。

插件和目标:maven archetype:create. Archetype是插件标识,create是目标标识。

一个 Maven 插件是一个单个或者多个目标的集合。Maven 插件的例子有一些简单但核心的插件,像 Jar 插件,它包含了一组创建JAR 文件的目标,Compiler插件,它包含了一组编译源代码和测试代码的目标,或者 Surefire 插件,它包含一组运行单元测试和生成测试报告的目标。而其它的,更有专门的插件包括:Hibernate3 插件,用来集成流行的持久化框架 Hibernate,JRuby 插件,它让你能够让运行 ruby 称为 Maven 构建的一部分或者用 Ruby 来编写 Maven 插件。Maven也提供了自定义插件的能力。一个定制的插件可以用 Java 编写,或者用一些其它的语言如 Ant,Groovy,beanshell 和之前提到的 Ruby。

 

生命周期命令:maven install

Mvn install命令没有进行任何插件配置或者定制,所以这个例子绑定了一组标准插件的目标到默认的生命周期。当 Maven 经过以 package 为结尾的默认生命周期的时候,下面的目标按顺序被执行:

resources:resources

      Resources 插件的 resources 目标绑定到了 resources 阶段。这个目标复

      制 src/main/resources 下的所有资源和其它任何配置的资源目录,到输

      出目录。

compiler:compile

      Compiler 插件的 compile 目标绑定到了 compile 阶段。这个目标编译

      src/main/java 下的所有源代码和其他任何配置的资源目录,到输出目

      录。

resources:testResources

      Resources 插件的 testResources 目标绑定到了 test-resources 阶段。

      这个目标复制 src/test/resources 下的所有资源和其它任何的配置的测

      试资源目录,到测试输出目录。

compiler:testCompile

      Compiler 插件的 testCompile 目标绑定到了 test-compile 阶段。这个目

      标编译 src/test/java 下的测试用例和其它任何的配置的测试资源目录,

      到测试输出目录。

surefire:test

      Surefire 插件的 test 目标绑定到了 test 阶段。这个目标运行所有的测试

      并且创建那些捕捉详细测试结果的输出文件。默认情况下,如果有测试失

      败,这个目标会终止。

jar:jar

      Jar 插件的 jar 目标绑定到了 package 阶段。这个目标把输出目录打包成

      JAR 文件。

当 Maven 运行一个目标的时候,每个目标都会访问定义在项目 POM 里的信息。

 

 

其他命令:

mvn install:install-file -DgeneratePom=true -DgroupId=jep -DartifactId=jep -Dversion=3.3.0 -Dpackaging=jar -Dfile=E:/lib/LIB_COMMON/jep-3.3.0-trial.jar:添加一个包到依赖库。

mvn dependency:resolve  mvn dependency:tree浏览项目依赖。

mvn archetype:create :创建 Maven 项目

mvn compile :编译源代码

mvn test-compile :编译测试代码

mvn test : 运行应用程序中的单元测试

mvn site : 生成项目相关信息的网站

mvn clean :清除目标目录中的生成结果

mvn package : 依据项目生成 jar 文件

mvn install :在本地 Repository 中安装 jar

mvn eclipse:eclipse :生成 Eclipse 项目文件

  1. 4. Maven实践

 

以文章开头例子为例,做为实践。

1. 下载依赖包,并添加到本地repository.如果配置了远程依赖库里面已经有了这些依赖包,那无需下载,在编译时会自动下载到本地库。

下载struts2,hibernate2,spring2.5,mysql-jdbc等相关的包到本地,通过命令安装到本地repository.

mvn install:install-file -DgrouptId=framework -DartifactId=spring-beans -Dversion=2.5.6 -Dfile=spring-beans-2.5.6.jar

该命令将spring-beans-2.5.6.jar安装到本地repository.

2. 创建总控项目

mvn archetype:create命令创建总控项目,修改pom.xml文件如下:

<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">

  <modelVersion>4.0.0</modelVersion>

  <groupId> com.companyName.contentSearch </groupId>

  <artifactId>contentSearch</artifactId>

  <packaging>pom</packaging>

  <version>1.0</version>

  <name>Chapter 6 Simple Parent Project</name>

  <modules>

    <module>contentSearch-dal</module>

    <module>contentSearch-biz</module>

    <module>contentSearch-web</module>

  </modules>

  <build>

    <pluginManagement>

      <plugins>

        <plugin>

          <groupId>org.apache.maven.plugins</groupId>

          <artifactId>maven-compiler-plugin</artifactId>

          <configuration>

            <source>1.5</source>

            <target>1.5</target>

          </configuration>

        </plugin>

      </plugins>

   </pluginManagement>

  </build>

  <dependencies>

    <dependency>

      <groupId>junit</groupId>

      <artifactId>junit</artifactId>

      <version>3.8.1</version>

      <scope>test</scope>

    </dependency>

  </dependencies>

</project>

3. 创建子项目

总控项目包括了三个子项目,在总控项目文件夹下面创建3个子项目如下:

contentSearch-dal:

<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">

<modelVersion>4.0.0</modelVersion>

 

<parent>

     <groupId> com.companyName.contentSearch </groupId>

     <artifactId>contentSearch</artifactId>

     <version>1.0</version>

</parent>

<artifactId>contentSearch-dal</artifactId>

<packaging>jar</packaging>

<version>1.0</version>

<name>contentSearch-dal</name>

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

<dependencies>

     <dependency>

         <groupId>junit</groupId>

         <artifactId>junit</artifactId>

         <version>3.8.1</version>

         <scope>test</scope>

     </dependency>

     <dependency>

         <groupId>generalorm</groupId>

         <artifactId>hibernate</artifactId>

         <version>3.0</version>

     </dependency>

     <dependency>

         <groupId>mysql</groupId>

         <artifactId>mysql-connector-java</artifactId>

         <version>5.1.6</version>

     </dependency>

     <dependency>

         <groupId>log4j</groupId>

         <artifactId>log4j</artifactId>

         <version>1.2.14</version>

     </dependency>

     <dependency>

         <groupId>dom4j</groupId>

         <artifactId>dom4j</artifactId>

         <version>1.6.1</version>

     </dependency>

     <dependency>

         <groupId>slf4j</groupId>

         <artifactId>slf4j-api</artifactId>

         <version>1.5.8</version>

     </dependency>

     <dependency>

         <groupId>slf4j</groupId>

         <artifactId>slf4j-nop</artifactId>

         <version>1.5.2</version>

     </dependency>

     <dependency>

         <groupId>antlr</groupId>

         <artifactId>antlr</artifactId>

         <version>2.7.6</version>

     </dependency>

     <dependency>

         <groupId>jta</groupId>

         <artifactId>jta</artifactId>

         <version>1.1</version>

     </dependency>

     <dependency>

         <groupId>javassist</groupId>

         <artifactId>javassist</artifactId>

         <version>3.9.0.GA</version>

     </dependency>

     <dependency>

         <groupId>commons-collections</groupId>

         <artifactId>commons-collections</artifactId>

         <version>3.1</version>

     </dependency>

</dependencies>

</project>

contentSearch-biz:

<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">

<modelVersion>4.0.0</modelVersion>

<parent>

     <groupId> com.companyName.contentSearch</groupId>

     <artifactId>contentSearch</artifactId>

     <version>1.0</version>

</parent>

<artifactId>contentSearch-biz</artifactId>

<packaging>jar</packaging>

<version>1.0</version>

<name>contentSearch-biz</name>

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

<dependencies>

     <dependency>

         <groupId>junit</groupId>

         <artifactId>junit</artifactId>

         <version>3.8.1</version>

         <scope>test</scope>

     </dependency>

     <dependency>

         <groupId> com.companyName.contentSearch </groupId>

         <artifactId>contentSearch-dal</artifactId>

         <version>1.0</version>

         <scope></scope>

     </dependency>

     <dependency>

         <groupId>com.sun</groupId>

         <artifactId>mail</artifactId>

         <version>1.4.3</version>

         <scope></scope>

     </dependency>

     <dependency>

         <groupId>com.sun</groupId>

         <artifactId>activation</artifactId>

         <version>1.1.1</version>

         <scope></scope>

     </dependency>

</dependencies>

</project>

contentSearch-web:

<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">

<modelVersion>4.0.0</modelVersion>

<parent>

     <groupId> com.companyName.contentSearch </groupId>

     <artifactId>contentSearch</artifactId>

     <version>1.0</version>

</parent>

<artifactId>contentSearch-web</artifactId>

<packaging>war</packaging>

<version>1.0-SNAPSHOT</version>

<name>contentSearch-web Maven Webapp</name>

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

<dependencies>

     <dependency>

         <groupId>apache.tomcat</groupId>

         <artifactId>servlet-api</artifactId>

         <version>2.5</version>

     </dependency>

     <dependency>

         <groupId>apache.commons</groupId>

         <artifactId>commons-fileupload</artifactId>

         <version>1.2.1</version>

     </dependency>

     <dependency>

         <groupId>commons-logging</groupId>

         <artifactId>commons-logging</artifactId>

         <version>1.0.4</version>

     </dependency>

     <dependency>

         <groupId>apache.tomcat</groupId>

         <artifactId>jsp-api</artifactId>

         <version>1.0</version>

     </dependency>

     <dependency>

         <groupId>junit</groupId>

         <artifactId>junit</artifactId>

         <version>3.8.1</version>

         <scope>test</scope>

     </dependency>

     <dependency>

         <groupId>framework</groupId>

         <artifactId>struts2-core</artifactId>

         <version>2.1.8</version>

     </dependency>

     <dependency>

         <groupId>framework</groupId>

         <artifactId>xwork-core</artifactId>

         <version>2.1.6</version>

     </dependency>

     <dependency>

         <groupId>framework</groupId>

         <artifactId>spring-core</artifactId>

         <version>2.5.6</version>

     </dependency>

     <dependency>

         <groupId>framework</groupId>

         <artifactId>spring-web</artifactId>

         <version>2.5.6</version>

     </dependency>

     <dependency>

         <groupId>framework</groupId>

         <artifactId>spring-context</artifactId>

         <version>2.5.6</version>

     </dependency>

     <dependency>

         <groupId>framework</groupId>

         <artifactId>spring-beans</artifactId>

         <version>2.5.6</version>

     </dependency>

     <dependency>

         <groupId>framework</groupId>

         <artifactId>freemarker</artifactId>

         <version>2.3.15</version>

     </dependency>

     <dependency>

         <groupId>framework</groupId>

         <artifactId>struts2-spring-plugin</artifactId>

         <version>2.1.8</version>

     </dependency>

     <dependency>

         <groupId> com.companyName.contentSearch </groupId>

         <artifactId>contentSearch-biz</artifactId>

         <version>1.0</version>

     </dependency>

     <dependency>

         <groupId>framework</groupId>

         <artifactId>struts2-json-plugin</artifactId>

         <version>2.1.8</version>

     </dependency>

</dependencies>

<build>

     <finalName>contentSearch-web</finalName>

     <plugins>

         <plugin>

             <groupId>org.mortbay.jetty</groupId>

             <artifactId>maven-jetty-plugin</artifactId>

             <version>6.1.9</version>

         </plugin>

     </plugins>

</build>

</project>

4. 编写代码,打包运行。

mvn clean install

mvn jetty:run

以上只是从构建的角度介绍maven的使用,还有很多其他的特性待以后学习后再做介绍。作为一个优秀的构建工具,maven还是值得推荐的。

 

http://maven.apache.org/guides/ 

附上官网上的指南地址。

转载于:https://www.cnblogs.com/langren1992/p/5221993.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396762.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++如何打开hdf5文件_如何打开CSV格式文件才能正常使用?

正文开始前先给大家来一波福利&#xff0c;欢迎大家扫码关注后&#xff0c;手动发送“薪酬”领取《企业薪酬管理必备资料包》&#xff01;注意&#xff1a;先扫码关注再回复回复关键词&#xff01;先扫码关注再回复回复关键词&#xff01;先扫码关注再回复回复关键词&#xff0…

Linux驱动技术(四) _异步通知技术

异步通知的全称是"信号驱动的异步IO"&#xff0c;通过"信号"的方式&#xff0c;放期望获取的资源可用时&#xff0c;驱动会主动通知指定的应用程序&#xff0c;和应用层的"信号"相对应&#xff0c;这里使用的是信号"SIGIO"。操作步骤是…

陕理工高级语言程序设计实验 (C)答案,陕理工高级语言程序计实验 (C)模板.doc

陕理工高级语言程序计实验 (C)模板《高级语言程序设计(C)》实验报告目录实验一&#xff1a;C开发环境与顺序结构程序设计21&#xff0e;实验目的&#xff1a;22&#xff0e;实验环境&#xff1a;23&#xff0e;实验步骤&#xff1a;24&#xff0e;实验内容&#xff1a;25&#…

java集合(1)-概述

Java集合类是一种特别有用的工具类,可用于存储数量不等的对象,并可以实现常用的数据结构,如栈,队列等,此外Java集合还可以用于保存具有映射关系的关联数组.java集合大致可分为Set,List,Queue和Map四种体系,其中Set代表无序,不可重复的集合;List代表有序,重复的集合;而Map则代表…

UVA1262Password(第K字典序)

题目链接 紫书P323 题意&#xff1a;两个6*5的字母矩阵&#xff0c;两个矩阵每列相同的字母&#xff0c;每列取一个&#xff0c;求按照字典序第k小的序列 分析&#xff1a; 对于第一个样例来说&#xff0c;我们得到{ACDW}、{BOP}、{GMOX}、{AP}、{GSU} 则一共有43423288种密码&…

自定义 View 循环滚动刻度控件

LoopScaleView 先看效果图: enter description hereLoopScaleView 是一个自定义的刻度尺风格的选值控件,从上面的动图大家可以看到 LoopScaleView 的运行效果.可以设置屏幕内显示的刻度数,也可以设置每一个刻度代表的值得大小。 LoopScaleView.class Nested class OnValueChang…

go 类型断言_(57)接口的类型断言

GO提供了一个方法&#xff0c;用来判断接口的底层值是什么类型类型断言 提供了访问接口值底层具体值的方式。t : i.(T)该语句断言接口值 i 保存了具体类型 T&#xff0c;并将其底层类型为 T 的值赋予变量 t。若 i 并未保存 T 类型的值&#xff0c;该语句就会触发一个panic。为了…

使用web3j构建以太坊钱包

创建一个以太坊钱包有多种方式&#xff0c;一般情况下可以通过geth、EtherumWallet等客户端。对于前端&#xff0c;可以使用插件MetaMask进行创建。这几种方式技术实现虽然不同&#xff0c;但底层原理是一致的。本文主要介绍如何通过web3j架构创建一个以太坊的冷钱包&#xff0…

Html、CSS、JavaScript 实时效果在线编辑器 - 学习的好工具,算不算?!

关于 二维码 与 NFC 之间的出身贫贱说太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es)本文遵循“署名-非商业用途-保持一致”创作公用协议转载请保留此句&#xff1a;太阳火神的漂亮人生 - 本博客专注于 敏捷开发及移动和物联设备研究&#xff1a;iOS、Android、Html5、…

android自定义更新,Android 完美解决自定义preference与ActivityGroup UI更新的问题

之前发过一篇有关于自定义preference 在ActivityGroup 的包容下出现UI不能更新的问题&#xff0c;当时还以为是Android 的一个BUG 现在想想真可笑 。其实是自己对机制的理解不够深刻&#xff0c;看来以后要多看看源码才行。本篇讲述内容大致为如何自定义preference 开始到与Act…

vxlan 资料及其在 neutron中的应用

2019独角兽企业重金招聘Python工程师标准>>> VXLAN 是一个新兴的SDN 标准&#xff0c;它定义了一种新的 overlay 网络&#xff0c;它主要的创造者是 VMware, Cisco 和 Arista。它被设计来消除虚拟化网络世界中的 VLAN 数目的限制。VXLAN 本身是一个多播标准&#xf…

横流式冷却塔计算风量_研讨丨卓展标准高效制冷机房技术之影响冷却塔效率的几个因素...

集中制冷用空调系统中&#xff0c;单台冷却塔的冷却水量基本上都小于1,000m/h&#xff0c;且装有淋水填料的横流机械通风开式居多。本文将已横流开式冷却塔为对象&#xff0c;探讨影响其效率的几个因素。横流开式冷却塔示意图如下所示&#xff1a;横流开式冷却塔示意图 Fig 01说…

我是培训出来的我怕谁

引子: 江小峰是我带过的徒弟中跟我最久&#xff0c;也是最聪明的一个。 他一个高中生&#xff0c;没上过大学&#xff0c;高中毕业后在老家卖了三年电脑&#xff0c;天天给人装操作系统&#xff0c;有天他在网上看到某培训机构招生简介&#xff0c;一时冲动揣上三年血汗钱&…

android平台gallery2应用分析,Android5.1图库Gallery2代码分析数据加载流程

图片数据加载流程。Gallery---->GalleryActivity------>AlbumSetPage------->AlbumPage--------->PhotoPage相册集 照片集 某张图片1,AlbumSetPage.javaprivate void initializeData(Bundle data) {String mediaPath data…

python开课吧1980课程_开课吧的课程怎么样?

就那那些编程开发课来说。现在网络上充斥着大量的编程开发课程&#xff0c;什么python的&#xff0c;java的&#xff0c;c的&#xff0c;而且名字一个比一个夸张&#xff0c;21天精通c&#xff0c;7天熟练运用java&#xff0c;3天掌握python核心代码&#xff0c;这些课程标题简…

专业概念

1.JDBC: java数据库连接&#xff08;JDBC&#xff09;用于在java程序中实现数据库的操作功能&#xff0c;它提供了执行sql语句&#xff0c;访问各种数据库的方法&#xff0c;并为各种不同的数据库提供统一的操作接口&#xff0c;java.sql包中 包含了jdbc操作数据库的所有类 2.…

前端解决跨域问题的8种方案

2019独角兽企业重金招聘Python工程师标准>>> 1.同源策略如下&#xff1a; URL说明是否允许通信http://www.a.com/a.js http://www.a.com/b.js同一域名下允许http://www.a.com/lab/a.js http://www.a.com/script/b.js同一域名下不同文件夹允许http://www.a.com:8000/…

k歌的录音伴奏合成技术如何实现_K歌神器,用唱吧麦克风攀登天籁高峰

自从喜欢上了手机K歌&#xff0c;经常会上传一些自己的作品&#xff0c;起初无论音质如何都是乐在其中&#xff0c;可时间久了发现回放效果确实不如那榜单上的高手&#xff0c;究其原因想到了麦克风&#xff0c;网上一搜果然有各种K歌辅助工具&#xff0c;多番对比之下&#xf…

浅谈内存开辟问题和Block内存问题

我们知道&#xff0c;内存分为栈&#xff0c;堆&#xff0c;块。 栈中的内存由系统自己释放&#xff0c;堆是存对象初始化的地方&#xff0c;块是CPU与内存连接的缓冲器&#xff0c;运行速度比内存快&#xff0c;比CPU慢。 例如&#xff0c;我们NSMutableArray *array [NSMuta…

vue render函数_Vue原理解析(一):Vue到底是什么?

Vue&#xff0c;现在前端的当红炸子鸡&#xff0c;随着热度指数上升&#xff0c;实在是有必要从源码的角度&#xff0c;对它功能的实现原理一窥究竟。个人觉得看源码主要是看两样东西&#xff0c;从宏观上来说是它的设计思想和实现原理&#xff1b;微观上来说就是编程技巧&…