精华内容
下载资源
问答
  • maven 仓库搭建

    2021-03-09 08:08:10
    Maven 是一种构建工具,Maven 包是由所谓 POM(Project Object Model)所定义的文件项目对象模型存储在名为 pom.xml 的文件中。以下是一个简单的示例:4.0.0com.mycompany.appmy-app1.0junitjunit3.8.1test对于一个合...

    Maven项目使用项目对象模型(Project Object Model,POM)来配置。Maven 是一种构建工具,Maven 包是由所谓 POM(Project Object Model)所定义的文件

    项目对象模型存储在名为 pom.xml 的文件中。

    以下是一个简单的示例:

    4.0.0

    com.mycompany.app

    my-app

    1.0

    junit

    junit

    3.8.1

    test

    对于一个合符规范的 Maven Package,pom 文件、aar(或者 jar) 文件是必须的。

    设置 maven 仓库

    在Android 项目中通常是是在根目录的 build.gradle 中设置 maven 仓库的地址

    buildscript {

    repositories {

    maven {

    url 'https://xxxxxxxx/nexus/content/repositories/ss_app_android'

    }

    maven {

    url 'https://xxxxxxx/nexus/content/repositories/central'

    }

    // 这两个是 maven 的中央仓库

    jcenter()

    mavenCentral()

    }

    }

    maven { url } 除了可以添加远程仓库,还能添加本地的 maven 仓库

    maven {

    url 'file:///xxxxAndroid/repo/'

    }

    发布 Maven 包

    可以通过 gradle 插件 快速发布 maven 仓库

    lolcalmaven 发布

    新建lolcalmaven module

    修改gradle.properties

    PROJ_NAME=localrepo

    PROJ_ARTIFACTID=localrepo

    PROJ_POM_NAME=Local Repository

    LOCAL_REPO_URL=file:///Users/your-user-name/Documents/Android/repo/

    #以上是 Mac 的本地路径,如果是 Windows,则是类似:

    #LOCAL_REPO_URL=file:///C:/Users/cadmanager/Documents/repo/

    在lolcalmaven 的 build.gradle 中增加和配置 maven plugin

    apply plugin: 'maven'

    uploadArchives {

    repositories.mavenDeployer {

    repository(url: LOCAL_REPO_URL)

    pom.groupId = PROJ_GROUP

    pom.artifactId = PROJ_ARTIFACTID

    pom.version = PROJ_VERSION }

    }

    控制台运行

    ./gradlew -p localrepo clean build uploadArchives --info

    生成的文件

    .

    ├── localrepo-1.0.0.aar

    ├── localrepo-1.0.0.aar.md5

    ├── localrepo-1.0.0.aar.sha1

    ├── localrepo-1.0.0.pom

    ├── localrepo-1.0.0.pom.md5

    └── localrepo-1.0.0.pom.sha1

    生成的 pom 文件

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    4.0.0

    io.github.xuyushi

    localrepo

    1.0.0

    aar

    com.android.support

    appcompat-v7

    25.3.0

    compile

    在新的项目工程中使用,在根目录的 gradle 中添加本地仓库

    allprojects {

    repositories {

    jcenter()

    maven {

    url 'file:///Users/xuyushi/Documents/Android/repo/'

    }

    }

    }

    在 app moudle的 build.gradle 中增加依赖

    compile 'io.github.xuyushi:localrepo:1.0.0'

    这样就可以在项目中使用 本地仓库中的库了

    发布 jcenter 远程仓库

    注册账号

    Bintray是jcenter的托管商,因此你必须注册一个Bintray账号,注册完账号后记下你的用户名以及API Key。

    登陆后在首页右上角点击用户名进入个人主页,然后点击用户名下面的Edit进入个人信息编辑页面,接下来点击页面左边列表的最后一项API Key

    配置插件

    在项目的根目录 build.gradle 中添加 dependencies

    dependencies {

    classpath 'com.android.tools.build:gradle:2.2.2'

    classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'

    classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.2'

    // NOTE: Do not place your application dependencies here; they belong

    // in the individual module build.gradle files

    }

    配置 local.properties

    配置在本地文件中 ,不计入版本管理

    bintray.user=xxxx

    bintray.apikey=your keys

    修改需要上传的 module 的 gradle 文件

    apply 插件

    apply plugin: 'com.github.dcendents.android-maven'

    apply plugin: 'com.jfrog.bintray'

    // This is the library version used when deploying the artifact

    version = "1.0.0"

    def siteUrl = 'http://xuyushi.github.io' // 项目的主页

    def gitUrl = 'http://xuyushi.github.io' // Git仓库的url

    group = "io.github.xuyushi" // Maven Group ID for the artifact,一般填你唯一的包名

    install {

    repositories.mavenInstaller {

    // This generates POM.xml with proper parameters

    pom {

    project {

    packaging 'aar'

    // Add your description here

    name 'multi-format 1D/2D barcode image processing use zxing.'

    url siteUrl

    // Set your license

    licenses {

    license {

    name 'The Apache Software License, Version 2.0'

    url 'http://www.apache.org/licenses/LICENSE-2.0.txt'

    }

    }

    developers {

    developer {

    id 'xuyushi' //填写的一些基本信息

    name 'xuyushi'

    email 'xmy166@gmail.com'

    }

    }

    scm {

    connection gitUrl

    developerConnection gitUrl

    url siteUrl

    }

    }

    }

    }

    }

    task sourcesJar(type: Jar) {

    from android.sourceSets.main.java.srcDirs

    classifier = 'sources'

    }

    task javadoc(type: Javadoc) {

    source = android.sourceSets.main.java.srcDirs

    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))

    }

    task javadocJar(type: Jar, dependsOn: javadoc) {

    classifier = 'javadoc'

    from javadoc.destinationDir

    }

    artifacts {

    archives javadocJar

    archives sourcesJar

    }

    Properties properties = new Properties()

    properties.load(project.rootProject.file('local.properties').newDataInputStream())

    bintray {

    user = properties.getProperty("bintray.user")

    key = properties.getProperty("bintray.apikey")

    configurations = ['archives']

    pkg {

    repo = "maven"

    name = "maventest" //发布到JCenter上的项目名字

    websiteUrl = siteUrl

    vcsUrl = gitUrl

    licenses = ["Apache-2.0"]

    publish = true

    }

    }

    javadoc { //jav doc采用utf-8编码否则会报“GBK的不可映射字符”错误

    options{

    encoding "UTF-8"

    charSet 'UTF-8'

    }

    }

    在 jcenter 中新建 maven 仓库

    上传命令

    ./gradlew jcentermaven:bintrayUpload

    将提交到Bintray的项目发布到JCenter

    完成上述的步骤只是将项目提交到bintray,还无法使用该项目库,因为还没有发布到JCenter。

    登入Bintray网站,进入个人中心,在右侧的Owned Repositories区域点击Maven的图标,进入你的Maven项目列表。

    如果已经上传成功了,在这里就能看到你的项目,进入项目详情,在右下角的Linked To区域点击Add to JCenter,然后在Comments输入框里随便填写下信息,最后点Send提交请求即可。一般情况下当天就会审核,审核通过后会给你发邮件通知你,并且以后更新项目就不需要再审核了。

    审核成功后就可以使用你发布到JCenter上的项目了。

    使用你发布到JCenter上的项目

    在Bintray的搜索输入框中输入你的项目:

    ###总结

    既然要上传到Jcenter上,自然要去 https://bintray.com 中注册账号

    根据自己的需求创建maven的Repository

    把项目分离成Module

    在项目根目录的build.gradle中添加bintray插件

    在local.properties中添加bintray认证

    修改Module中的build.gradle中的配置

    在Android Studio终端使用./gradlew xxx上传

    最后在JFrog Bintray中同步到Jcenter中

    展开全文
  • Maven 仓库

    2021-11-18 17:34:46
    何为Maven仓库 在Maven世界中,任何一个依赖、插件或者项目构建的输出,都可以称为构件。例如依赖log4j-1.2.15.jar是一个构件,插件maven-compiler-plugin-2.0.2.jar是一个构件,项目构建完成后的输出jar包也是一个...

    Maven 仓库

    何为Maven仓库

    在Maven世界中,任何一个依赖、插件或者项目构建的输出,都可以称为构件。例如依赖log4j-1.2.15.jar是一个构件,插件maven-compiler-plugin-2.0.2.jar是一个构件,项目构建完成后的输出jar包也是一个构建,任何一个构件都有一组坐标唯一标识。
    在一台工作台上,可能会有几十个Maven项目,所有项目都使用maven-compiler-plugin,这些项目中的大部分都用到了log4j,有一小部分用到了Spring Framework,还有另外一小部分用到了Struts2。在每个有需要的项目中都放置一份重复的log4j或者struts2显然不是最好的解决方案,这样做不仅造成了磁盘空间的浪费,而且也难于统一管理,文件的复制等操作也会降低构建的速度。而实际情况是,在不使用Maven的那些项目中,我们往往就能发现命名为lib/的目录,各个项目lib/目录下的内容存在大量的重复。
    得益于坐标机制,任何Maven项目使用任何一个构件的方式都是完全相同的。在此基础上,Maven可以在某个位置统一存储所有Maven项目共享的构件,这个统一的位置就是仓库。实际的Maven项目将不再各自存储其依赖文件,它们只需要声明这些依赖的坐标,在需要的时候,Maven会自动根据坐标找到仓库中的构件,并使用它们。
    为了实现重用,项目构件完毕后生成的构件也可以安装或者部署到仓库中,供其他项目使用。

    仓库的布局

    任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存储路径,这便是Maven的仓库布局方式。例如,log4j:log4j:1.2.15这一依赖,其对应的仓库路径为log4j/log4j/1.2.15/log4j-1.2.15.jar
    groupId/artifactId/version/artifactId-version.packaging

        private static final char PATH_SEPARATOR = '/';
     
        private static final char GROUP_SEPARATOR = '.';
     
        private static final char ARTIFACT_SEPARATOR = '-';
     
        public String pathOf( Artifact artifact )
        {
            ArtifactHandler artifactHandler = artifact.getArtifactHandler();
     
            StringBuilder path = new StringBuilder( 128 );
     
            path.append( formatAsDirectory( artifact.getGroupId() ) ).append( PATH_SEPARATOR );
            path.append( artifact.getArtifactId() ).append( PATH_SEPARATOR );
            path.append( artifact.getBaseVersion() ).append( PATH_SEPARATOR );
            path.append( artifact.getArtifactId() ).append( ARTIFACT_SEPARATOR ).append( artifact.getVersion() );
     
            if ( artifact.hasClassifier() )
            {
                path.append( ARTIFACT_SEPARATOR ).append( artifact.getClassifier() );
            }
     
            if ( artifactHandler.getExtension() != null && artifactHandler.getExtension().length() > 0 )
            {
                path.append( GROUP_SEPARATOR ).append( artifactHandler.getExtension() );
            }
     
            return path.toString();
    }
     
        private String formatAsDirectory( String directory )
        {
            return directory.replace( GROUP_SEPARATOR, PATH_SEPARATOR );
        }
    

    该pathOf()方法的目的是根据构件信息生成其在仓库中的路径。

    仓库的分类

    对于Maven来说,仓库只分为两类:本地仓库和远程仓库。当Maven根据坐标寻找构件的时候,它首先会查看本地仓库,如果本地仓库存在此构件,则直接使用;如果本地仓库不存在此构件,或者需要查看是否有更新的构建版本,Maven就会去远程仓库查找,发现需要的构件之后,下载到本地仓库再使用。如果本地仓库和远程仓库都没有需要的构件,Maven就会报错。
    在这个最基本分类的基础上,还有必要介绍一些特殊的远程仓库。中央仓库是Maven核心自带的远程仓库,它包含了绝大部分开源的构件。在默认配置下,当本地仓库没有Maven需要的构件的时候,它就会尝试从中央仓库下载。
    私服是另一种特殊的远程仓库,为了节省宽带和时间,应该在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。内部的项目还能部署到私服上供其他项目使用。
    除了中央仓库和私服,还有很多其他公开的远程仓库,常见的有Java.net Maven库(http://download.java.net/maven/2)和JBoss Maven库(http://repository.jboss.com/maven2)等。

    本地仓库

    一般来说,在Maven项目目录下,没有诸如lib/这样用来存放依赖文件的目录。当Maven在执行编译或测试时,如果需要使用依赖文件,它总是基于坐标使用本地仓库的依赖文件。
    默认情况下,不管是在Windows还是Linux上,每个用户在自己的用户目录下都有一个路径名为.m2/repository/的仓库目录。
    可以编辑文件~/.m2/settings.xml,设置localRepository元素的指为想要的仓库地址。

    <settings>
    	<localRepository>D:\java\repository\</localRepository>
    </setting>
    

    这样,该用户的本地仓库地址就被设置成了D:\java\repository\
    需要注意的是,默认情况下,~/.m2/setting.xml文件是不存在的,用户需要从Maven安装目录复制$M2_HOME/conf/settings.xml文件再进行编辑。不推荐直接修改全局目录的settings.xml文件。

    远程仓库

    安装好Maven后,如果不执行任何Maven命令,本地仓库目录是不存在的。当用户输入第一条Maven命令后,Maven才会创建本地仓库,然后根据配置和需要,从远程仓库下载构件至本地仓库。
    对于Maven来说,每个用户只有一个本地仓库,但可以配置访问很多远程仓库。

    中央仓库

    由于最原始的本地仓库是空的,Maven必须知道至少一个可用的远程仓库,才能在执行Maven命令的时候下载到需要的构件。中央仓库就是这样一个默认的远程仓库,Maven的安装文件自带了中央仓库的配置。使用解压工具打开jar文件$M2_HOME/lib/maven-model-builder-3.0.jar然后访问路径org/apache/maven/model/pom-4.0.0.xml可以看到:

    在这里插入图片描述
    包含这段配置文件是所有Maven项目都会继承的超级POM。这段配置使用id central对中央仓库进行唯一标识,其名称为Central Repository,它使用default仓库布局。需要注意的是snapshots元素,其子元素enabled的值为false,表示不从该中央仓库下载快照版本的构件。

    私服

    私服是一种特殊的远程仓库,它是假设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。当Maven需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存到私服上之后,再为Maven的下载请求提供服务。此外,一些无法从外部仓库下载到的构件也能从本地上传到私服上供大家使用。
    私服可以

    • 节省自己的外网带宽。建立私服同样可以减少组织自己的开支,大量的对于外部仓库的重复请求会消耗很大的带宽,利用私服代理外部仓库之后,对外的重复构件下载便得以消除,即降低外网带宽的压力。
    • 加速Maven构件。不停地连接请求外部仓库是十分耗时的,但是Maven的一些内部机制(如快照更新检查)要求Maven在执行构建的时候不停地检查远程仓库数据。因此,当项目配置了很多外部远程仓库的时候,构建地速度会被大大降低。使用私服可以很好地解决这一问题,当Maven只需要检查局域网内私服地数据时,构建的速度便能得到很大程度地提高。
    • 部署第三方构件。当某个构件无法从任何一个外部远程仓库获得,怎么办?这样地例子有很多,如组织内部生成的私有构件肯定无法从外部仓库获得、Oracle的JDBC驱动由于版本因素不能发布到公共仓库中。建立私服之后,便可以将这些构件部署到这个内部的仓库中,供内部的Maven项目使用。
    • 提高稳定性,增强控制。Maven构件高度依赖于远程仓库,因此,当Internet不稳定的时候,Maven构建也会变得不稳定,甚至无法构建。使用私服后,即使暂时没有Internet连接,由于私服中已经缓存了大量构件,Maven也仍然可以正常运行。此外,一些私服软件还提供了很多额外的功能,如权限管理、RELEASE/SNAPSHOT区分等,管理员可以对仓库进行一些更高级的控制。
    • 降低中央仓库的负荷。运行并维护一个中央仓库不是一件容易的事情,服务数百万的请求,存储数T的数据,需要相当大的财力。使用私服可以避免很多对中央仓库的重复下载。

    远程仓库的配置

    很多情况下,默认的中央仓库无法满足项目的需求,可能项目需要的构件存在于另外一个远程仓库中,如JBoss Maven仓库。这时,可以在POM中配置该仓库

    	<repositories>
    		<repository>
    			<id>jboss</id>
    			<name>JBoss Repository</name>
    			<url>http://repository.jboss.com/maven2/</url>
    			<releases>
    				<enabled>true</enabled>
    			</releases>
    			<snapshots>
    				<enabled>false</enabled>
    			</snapshots>
    			<layout>default</layout>
    		</repository>
    	</repositories>
    

    在repositories元素下,可以使用repository子元素声明一个或者多个远程仓库。该例中声明了一个id为jboss,名称为JBoss Repository的仓库。任何一个仓库声明的id必须是唯一的,尤其需要注意的是,Maven自带的中央仓库使用的id为central,如果其他的仓库声明也使用该id,就会覆盖中央仓库的配置。该配置中的url指向了仓库的地址,一般来说,该地址都基于http协议,Maven用户都可以在浏览器中打开仓库地址浏览构件。
    该例子中releases的enable值为true,表示开启JBoss仓库的发布版本下载支持,而snapshots的enable值为false,表示关闭JBoss仓库的快照版本的下载支持。因此,根据该配置,Maven只会从JBoos仓库下载发布版的构件,而不会下载快照版的构件。
    该例子中的layout元素值default表示布局是Maven2及Maven3的默认布局,而不是Maven1的布局。
    对于releases和snapshots来说,除了enabled,它们还包含另外两个子元素updatePolicy和checksumPolicy:

    			<snapshots>
    				<enabled>true</enabled>
    				<updatePolicy>daily</updatePolicy>
    				<checksumPolicy>ignore</checksumPolicy>
    			</snapshots>
    

    元素updatePolicy用来配置Maven从远程仓库检查更新的频率,默认的值是daily,表示Maven每天检查一次。其他可用的值包含:never——从不检查更新;always——每次构建都检查更新;interval:X——每隔X分钟检查一次更新(X为任意整数)。
    元素checksumPolicy用来配置Maven检查检验和文件的策略。当构件被部署到Maven仓库中时,会同时部署对应的校验和文件。在下载构件的时候,Maven会验证校验和文件,如果校验和验证失败,怎么办?当checksumPolicy的值为默认的warn时,Maven会在执行构建时输出警告信息,其他可用的值包括:fail——Maven遇到校验和错误就让构建失败;ignore——使Maven完全忽略校验和错误。

    远程仓库的认证

    大部分远程仓库无须认证就可以访问,但有时候出于安全方面的考虑,我们需要提供认证信息才能访问一些远程仓库。例如,组织内部有一个Maven仓库服务器,该服务器为每个项目都提供独立的Maven仓库,为了防止非法的仓库访问,管理员为每个仓库提供了一组用户名及密码。这时,为了能让Maven访问仓库内容,就需要配置认证信息。
    配置认证信息和配置仓库信息不同,仓库信息可用直接配置在POM文件中,但是认证信息必须配置在setting.xml文件中。这时因为POM往往是被提交到代码仓库中供所有成员访问的,而settings.xml一般只放在本机。因此,在settings.xml中配置认证信息更为安全。
    假设需要为一个id为my-proj的仓库配置认证信息,编辑settings.xml文件

    <settings>
    	<servers>
    		<server>
    			<id>my-proj</id>
    			<username>repo-user</username>
    			<password>repo-pwd</password>
    		</server>
    	</servers>
    </settings>
    

    部署至远程仓库

    Maven除了能对项目进行编译、测试、打包之外,还能将项目生成的构建部署到仓库中。首先,需要编辑项目的pom.xml文件

    	<distributionManagement>
    		<repository>
    			<id>proj-releases</id>
    			<name>Proj Release Repository</name>
    			<url>http://192.168.1.100/content/repositories/proj-releases</url>
    		</repository>
    		<snapshotRepository>
    			<id>proj-snapshots</id>
    			<name>Proj Snapshot Repository</name>
    			<url>http://192.168.1.100/content/repositories/proj-releases</url>
    		</snapshotRepository>
    	</distributionManagement>
    

    distributionManagement包含repository和snapshotRepository子元素,前者表示发布版本构件的仓库,后者表示快照版本的仓库。
    配置正确后,在命令行运行mvn clean deploy,Maven就会将项目构建输出的构件部署到配置对应的远程仓库,如果当前的版本是快照版本,则部署到快照版本仓库地址,否则就部署到发布版本仓库地址。

    从仓库解析依赖的机制

    当本地仓库没有依赖构件的时候,Maven会自动从远程仓库下载;当依赖版本为快照版本的时候,Maven会自动找到最新的快照。这背后的依赖解析机制可用概括如下:
    1)当依赖的范围是system的时候,Maven直接从本地文件系统解析构件。
    2)根据依赖坐标计算仓库路径后,尝试直接从本地仓库寻找构件,如果发现相应构件,则解析成功。
    3)在本地仓库不存在相应构件的情况下,如果依赖的版本是显式的发布版本构件,如1.2、2.1-beta-1等,则遍历所有的远程仓库,发现后,下载并解析使用。
    4)如果依赖的版本是RELEASE或者LATEST,则基于更新策略读取多有远程仓库的元数据groupId/artifactId/maven-metadata.xml,将其与本地仓库的对应元数据合并后,计算出RELEASE或者LATEST真实的值,然后基于这个真是的值检查本地和远程仓库。
    5)如果依赖的版本是SNAPSHOT,则基于更新策略读取所有远程仓库的元数据groupId/artifactId/version/maven-meradata.xml,将其与本地仓库的对应元数据合并后,得到最新快照版本的值,然后基于该值检查本地仓库,或者从远程仓库下载。
    6)如果最后解析得到的构件版本是时间戳格式的快照,如1.4.1-20091104.121450-121,则复制其时间戳格式的文件至非时间戳格式,如SNAPSHOT,并使用该非时间戳格式的构件。
    前面提到的RELEASE和LATEST版本,它们分别对应了仓库中存在的该构件的最新发布版本和最新版本(包含快照),而这两个最新是基于groupId/artifactId/maven-metadata.xml计算出来的。

    <metadata>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <versioning>
    	<latest>2.5.7</latest>
    	<release>2.5.7</release>
    	<versions>
    		<version>1.0.0.RELEASE</version>
    		<version>1.0.1.RELEASE</version>
    		<version>1.0.2.RELEASE</version>
    		<version>1.1.0.RELEASE</version>
    		<version>1.1.1.RELEASE</version>
    		<version>1.1.2.RELEASE</version>
    		<version>1.1.3.RELEASE</version>
    		<version>1.1.4.RELEASE</version>
    		<version>1.1.5.RELEASE</version>
    		...
    	</versions>
    	<lastUpdated>20211118113123</lastUpdated>
    </versioning>
    </metadata>
    

    该XML文件列出了仓库中存在的该构件所有可用的版本,同时latest元素指向了这些版本中最新的那个版本,该例中是2.5.7.而release元素指向了这些版本中最新的发布版本,该例中是2.5.7。Maven通过合并多个远程仓库及本地仓库的元数据,就能计算出基于所有仓库的latest和release分别是什么,然后再解析具体的构件。
    需要注意的是,在依赖声明中使用LATEST和RELEASE是不推荐的做法,因为Maven随时都可能解析到不同的构件,可能今天LATEST是1.3.6,明天就成为1.4.0-SNAPSHOT了,且Maven不会明确告诉用户这样的变化。当这种变化造成构件失败的时候,发现问题会变得比较困难。
    Maven3不再支持在插件配置中使用LATEST和RELEASE。如果不设置版本,其效果就和RELEASE一样,Maven只会解析最新的发布版本构件。不过即使这样,也还存在潜在问题。
    当依赖的版本设为快照版本的时候,Maven也需要检查更新,这时Maven会检查仓库元数据groupId/artifactId/version/maven-metadata.xml

    镜像

    如果仓库X可用提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像。换句话说,任何一个可用从仓库Y获得的构件,都能够从它的镜像中获取。
    例如:http://maven.net.cn/content/groups/public/是中央仓库在中国的镜像,由于地理位置的因素,该镜像往往能够提供比中央仓库更快的服务。因此,可以配置Maven使用哦个该镜像来替代中央仓库。编辑settings.xml

      <mirrors>
    	<mirror>
          <id>maven.net.cn</id>
          <mirrorOf>central</mirrorOf>
          <name>one of the central mirrors in China</name>
          <url>http://maven.net.cn/content/groups/public/</url>
        </mirror>
      </mirrors>
    

    该例中,<mirrorOf>的值为central,表示该配置为中央仓库的镜像,任何对于中央仓库的请求都会转至该镜像。类似地,如果该镜像需要认证,也可以基于该id配置仓库认证。
    为了满足一些复杂的需求,Maven还支持更高级的镜像配置:

    • <mirrorOf>*</mirrorOf>:匹配所有远程仓库。
    • <mirrorOf>external:*</mirrorOf>:匹配所有远程仓库,使用localhost的除外,使用file://协议的除外。也就是说,匹配所有不在本机上的远程仓库。
    • <mirrorOf>repo1,repo2</mirrorOf>:匹配仓库repo1和repo2,使用逗号分隔多个仓库。
    • <mirrorOf>*,! repo1</mirrorOf>:匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除。
      需要注意的是,由于镜像仓库完全屏蔽了被镜像仓库,当镜像仓库不稳定或停止服务的时候,Maven仍将无法访问被镜像仓库,因而将无法下载构件。
    展开全文
  • [Java教程]Maven仓库分类0 2016-05-19 13:00:02MAVEN仓库分类Maven仓库分为:本地仓库+远程仓库两大类远程仓库又分为:中央仓库+私服+其它公共远程仓库1,在Maven中,任何一个依赖、插件或者项目构建的输出,都可以...

    [Java教程]Maven仓库分类

    0 2016-05-19 13:00:02

    MAVEN仓库分类

    Maven仓库分为:本地仓库+远程仓库两大类

    远程仓库又分为:中央仓库+私服+其它公共远程仓库

    1,在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件

    2,Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库。(仓库就是存放依赖和插件的地方)

    3,任何的构件都有唯一的坐标,Maven根据这个坐标定义了构件在仓库中的唯一存储路径

    4,本地仓库,就是Maven在本地存储构件的地方(maven的本地仓库,在安装maven后并不会创建,它是在第一次执行maven命令的时候才被创建)

    5,当maven寻找构件时,首先从本地仓库中寻找,若在本地仓库中找不到,则向远程仓库中寻找,远程仓库若还不能找到则会报错,远程仓库找到就下载到本地再使用。因此随着maven的不断的使用下载构件,它的本地仓库将越来越大

    6,一个构件只有在本地仓库中之后,才能由其他Maven项目使用

    7,中央仓库是maven自带的远程仓库,默认地址:http://repol.maven.org/maven2

    8,私服是架设在本机或者局域网中的一种特殊的远程仓库,通过私服可以方便的管理其它所有的外部远程仓库

    9,本地仓库默认的地址是:${user:home}/.m2/repository

    10,在项目中添加远程仓库,当中央仓库找不到所需构件时,我们可以配置pom.

    11,默认情况下,不管是在windows还是linux上,每个用户在自己的用户目录下都有一个路径名为.m2/repository/的仓库目录。有时候,因为某些原因(例如磁盘空间不足等),用户会想要自定义本地仓库目录地址,则需要修改settings.(此时更改后,所有的用户都会受到影响,而且如果maven进行升级,那么所有的配置都会被清除,所以要提前复制和备份M2_HOME/conf/settings.,故一般情况下不推荐配置全局的settings.

    本文网址:http://www.shaoqun.com/a/223513.html

    *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

    maven

    0

    展开全文
  • Maven 仓库、镜像

    2021-03-11 14:09:25
    Maven 仓库、镜像 ...根据这个坐标就可以定义其在仓库的唯一存储路径,那么就可以在项目中引用。 <groupId>junit</groupId> <artifactId>junit</artifactId> <version>...

    Maven 仓库、镜像

     

        在maven世界中任何一个依赖、插件或者项目构建的输出都可以称为构件,任何一个构件都有一个坐标作为唯一的标识。

    这个坐标就是:group、artifactId、version;根据这个坐标就可以定义其在仓库的唯一存储路径,那么就可以在项目中引用。

     

        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.10</version>

     

    2、Maven仓库原理

        Maven仓库是基于简单文件系统存储的,只要在文件系统中没有发现相关的文件,说明这几依赖并不存在,因此,我们很容易在本地仓库查找具体的依赖是否存在。

     

    3、仓库的分类信息(本地仓库、远程仓库)

        1)本地仓库就是我们自己机器上的文件系统,所以他是唯一的,项目构建时首先在本地仓库查找依赖,如果本地没有依赖时才会去寻找远程仓库。

        2)远程仓库指的是非本地的其他所有仓库,中央仓库、私服等都是远程仓库的一种。如果本地仓库没有项目构建需要的构件,你们就会从远程仓库下载,可是远程仓库如果也没有的话,你们就会项目报错。

     

    4、本地仓库设置

    <localRepository>D:\Program Files\apache-maven-3.2.2-repository</localRepository>

    安装的时候有个一conf/settings.xml文件,这个文件时全局控制文件,另外,还有一个就是C:\Users\Heweipo\.m2 下面也会有一个settings.xml文件,这个代表的是个人局部配置文件,然而,我们使用Eclipse默认采用这个settings.xml文件,可以通过如下截图修改:

     

    5、中央仓库

        Maven必须知道至少一个可用的远程仓库,才能执行Maven命令的时候下载到需要的构件。中央仓库就是这样一个默认的远程仓库,Maven安装文件自带远程仓库的位置是

        http://repo.maven.apache.org/maven2

    具体中央仓库在settings.xml文件的配置如下:

        <repositories>
               <repository>
                         <id>central</id>
                         <name>Central Repository</name>          
                         <url>http://repo.maven.apache.org/maven2</url>          
                         <layout>default</layout>          
                         <snapshots>
                             <enabled>true</enabled>
                             <updatePolicy>always</updatePolicy>
                             <checksumPolicy>always</checksumPolicy>
                         </snapshots> 
                </repository> 
        </repositories>

     

    6、私服

        私服是一种特殊的远程仓库,他是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。当Maven需要下载构件的时候,它从私服请求,如果私服上不存在改构件,则从外部的远程仓库下载,同时缓存在私服之上,然后为Maven下载请求提供服务,另外,对于第三方的jar无法从仓库下载(JDBC驱动)可以从本地上传到私服供客户端下载。

        优点主要有:

        1)节省外网宽带

        2)加速Maven构建

        3)部署第三方构件

        4)提高稳定性、增强控制:原因是外网不稳定

        5)降低中央仓库的负荷:原因是中央仓库访问量太大

    7、远程仓库认证

        有时候登录一个远程仓库需要用户名和密码进行身份验证,所以,需要远程仓库认证。配置认证信息和配置仓库信息不同,仓库信息可以直接配置POM文件中,但是认证信息必须配置在settings.xml文件中,目的就是安全性。当然,我们可以把仓库信息配置在settings.xml 中,这样的缺点就是好动态控制仓库,但是一般情况下不会改变仓库,我们本地私服一般都是唯一的。

       <server>
          <id>deploymentRepo_releases</id>
          <username>repouser</username>
          <password>repopwd</password>
        </server>

    值得注意的是,ID代表的是某个repository元素配置的ID。

     

    8、远程仓库部署

     <distributionManagement>
        <repository>
            <id>deploymentRepo_releases</id>
            <name>Nexus Release Repository</name>
            <url>http://localhost:8081/nexus/content/repositories/releases/</url>
        </repository>
        <snapshotRepository>
            <id>deploymentRepo_snapshots</id>
            <name>Nexus Snapshot Repository</name>
            <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
        </snapshotRepository>
    </distributionManagement>

    我们开发的版本可以通过 mvn deploy 把项目部署到对应的私服上去对于为什么要把发行版本和快照版本分开主要还是为了方便后期项目维护和当时的协同开发。比如发行版本肯定是稳定版,但是他的功能可能没有那么多,对于一些要求稳定的客户就可以给他发行版本;可是对于快照版本来说,是一个正在开发的版本,这个版本可能随时都会被另外一个项目依赖,如果他需要我的功能我就会进行代码提交,也就是部署到私服上去,然而,这个时候Maven就会把我的快照版本做一个时间戳添加在快照版本之后,别人依赖的快照版本也会自动更新为最新的快照版本,这些都是Maven帮我们完成,我们只要项目提交就好。

     

    9、镜像

        如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像,某些情况下使用镜像可以提高项目构建效率。

        settings.xml 中配置镜像

      <mirrors>
    
        <mirror>
          <id>mirrorId</id>
          <mirrorOf>repositoryId</mirrorOf>
          <name>Human Readable Name for this Mirror.</name>
          <url>http://my.repository.com/repo/path</url>
        </mirror>
    
      </mirrors>

    镜像的意思是,当你访问mirrorOf的仓库时,就会转到对应的镜像url中请求对应的资源。一般镜像都是和私服结合使用。由于私服可以代理任何外部的公共仓库(包括中央仓库),因此,对于组织内部的Maven用户来说,使用一个私服地址就等于使用了所有需要的外部仓库,这个可以将配置集中到私服,从而简化Maven本身的配置。在这种情况下,任何需要的构件都可以从私服中获得,私服就是所有仓库的镜像。这猴子那个镜像如下配置:

      <mirrors>
    
        <mirror>
          <id>mirrorId</id>
          <mirrorOf>*</mirrorOf>
          <name>Human Readable Name for this Mirror.</name>
          <url>http://my.repository.com/repo/path</url>
        </mirror>
    
      </mirrors>

     

    10 仓库中jar包搜索

       1)仓库搜索:

       2)中央仓库

        http://repo1.maven.org/maven2/

        http://repository.jboss.com/maven2/

        http://repository.sonatype.org/content/groups/public/

    展开全文
  • 最近在网上查找才发现阿里云提供了免费私有 maven 仓库,这可解决我的大问题了。 我们的大部分项目都是开源提供给用户的,这些项目我们都是发布到maven中央仓库,但也有部分内部使用的jar包,我们不希望发布到maven...
  • Maven仓库安装配置及使用

    千次阅读 2020-12-21 22:34:10
    Maven仓库安装配置什么是Maven?Maven 是 Apache 开源组织奉献的一个开源项目。Maven 的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)。开发人员只需做一些简单的配置,就可以批量完成...
  • 本文,就整理一下我把项目上传到公共Maven仓库的过程,当做一篇教程文章。 不得不说,上传公共Maven仓库,还是颇费周折的,差点没把人气死。 《萌新学开源》系列文章持续更新: 《萌新写开源01》如何使用注解优雅的...
  • 看到自己的jar包出现在中央仓库还是比较有成就感的
  • 众所周知,maven仓库是学习maven时非常重要的一个部分,而maven仓库又包括本地仓库和远程仓库两类,学好maven仓库关键是要学会更改中央仓库地址和了解仓库配置,下面小编就这两部分给大家做下介绍。1.两类仓库本地...
  • 这个是因为jar包的位置下存在这个文件,这个文件存在打包时会自动从你maven仓库中再次下载,但是你下载的仓库中又不存在这个jar包,所以打包时也会提示下载失败,删掉之后就会读取你本地的jar包,这个问题就解决了 ...
  • 之前发布开源项目Payment Spring Boot[1]到 Maven 中央仓库我都是手动执行mvn deploy,在CI/CD大行其道的今天使用这种方式有点“原始”。于是我一直在寻求...
  • maven仓库知识

    2021-07-21 13:58:02
    maven仓库知识maven仓库知识maven仓库优先级镜像(Mirroring)仓库settings.xml文件配置三大标签1. mirrors2. servers3. profiles(原文地址:...
  • Maven仓库安装

    2021-01-22 21:25:24
    1.昨日内容回顾 商城项目已完结,将在...仓库配置:设置本地仓库位置 2.maven-part1 2.1简述及作用(1) Maven:是一款优秀的项目管理工具。 作用: 项目构建管理(生命周期自动化) 依赖管理(针对jar包管理) 项目信息
  • 本地仓库主要是一种USER_HOME/.m2像nuget,npm一样Jar的maven将Jar包mvn install:install-file -Dfile=/Users/lind.zhang/DgroupId和DartifactId构成了该jar包在Dfile表示需要上传的jar包的绝对路径Dpackaging 为安装...
  • 其中,groupId、artifactId、version三个元素用来定义一个项目的坐标,也就是说,一个maven仓库中,完全相同的一组groupId、artifactId、version,只能有一个项目。 project:整个pom配置文件的根元素,所有的配置都...
  • 下载路径1:http://maven.apache.org/download.cgi 下载路径2: ...提取码:b6dn (本人装的Maven ...变量名可以定义随你定义 但是最好用英文 我定义的是 MAVEN_HOME 点击编辑 添加 %MAVEN_HOME%\bin 注(有些的pat
  • repo1 = 所有远程仓库都从该镜像获取,除 repo1 远程仓库以外 * = 所用远程仓库都从该镜像获取 maven的中央仓库id是central, 所以mirrorOf配置为central就达到了替换maven仓库的目的 repostitory,mirror,profile关系...
  • 1,本地仓库与远程仓库 Maven 仓库的分类: ​ 1.本地仓库 ​ 2....maven本地仓库的默认位置:无论是Windows还是Linux,在用户的目录下都有一个.m2/repository/的仓库目录,这就是Maven仓库的默认位
  • Maven 仓库06(mac)

    2021-12-09 10:13:18
    maven仓库是项目中依赖的第三方库,这个位置所在的位置叫做仓库 在maven中,任何一个插件或者项目构建输出,都可以称之为构建 maven仓库有三种类型 本地(local) 中央(central) 远程(remote) 本地仓库 maven...
  • 在日常开发中,不可避免的需要把自己的 library 发布到 maven 仓库中,这样使用起来也更加方便。 发布 aar 包到 maven 仓库,主要是使用 Gradle 提供的插件: maven 插件(旧版),在 Gradle 6.2 之后,就完全被弃...
  • Maven 仓库与配置

    2021-07-09 23:12:38
    仓库中的任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存 储路径,这要得益于 Maven 的坐标机制,任何 Maven 项目使用任何一个构件的方式都 是完全相同的,Maven 可以在某个位置统一存储所有...
  • Maven仓库

    2021-01-12 12:51:15
    准备一台虚拟机,安装maven前先安装jdk程序 [root@localhost ~]# java -version openjdk version "1.8.0_102" OpenJDK Runtime Environment (build 1.8.0_102-b14) OpenJDK 64-Bit Server VM (build 25.102-b14, ...
  • 文章转自http://blog.csdn.net/zlgydx/article/details/51130627什么是Maven仓库在不用Maven的时候,比如说以前我们用Ant构建项目,在项目目录下,往往会看到一个名为/lib的子目录,那里存放着各类第三方依赖jar文件...
  • 2、Maven仓库在哪里?3、本地仓库3.1 . uploadArchives3.2 . 执行uploadArchives3.3 . 使用本地仓库中的类库 4、局域网私有仓库4.1 . 下载Nexus4.2 . 运行4.3 . 发布4.4 . 使用私有仓库中的依赖包 5、发布到...
  • gradle发布代码到maven中央仓库环境githubSonatype ...想把自己写的一些代码发布到maven中央仓库,避免来回拷贝代码的步骤,百度了几篇文章照着做发现描述的不完整,要不就是在gradle用maven的方式搞提交的,但是一些
  • Maven仓库:存放Maven库资源的地方,可以是远程Maven服务器,也可以是本地Maven服 POM:Project Object Model,一个用来描述项目信息的xml文件,以xml节点的形式记录项目所属分组,项目名称,项目版本,依赖类库等...
  • 在Android的gradle配置上追加上传Maven的相关操作maven的gradle插件Android里内置了maven插件 只需要apply plugin: “maven” 即可使用maven插件配置maven配置maven仓库地址在root 下的build.gradle 的subprojects下...
  • Apache Maven,是一个软件(特别是Java软件)项目管理及自动构建工具,由Apache软件基金会所提供。...大家肯定遇到过想在pom文件中加入自己开发的依赖包,这些包肯定是不是在Maven仓库(http://repo1.mave...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 42,575
精华内容 17,030
关键字:

maven仓库定义