博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Maven配置笔记
阅读量:6320 次
发布时间:2019-06-22

本文共 6608 字,大约阅读时间需要 22 分钟。

hot3.png

android-m2e插件与maven

自定义用户配置路径

不管插件还是maven,默认的用户配置路径是统一的:${user.home}/.m2/settings.xml

但是插件可以通过eclipse设置用户配置的路径(配置方法参考);而maven不能永久指定,只能在每次使用mvn命令时加上"-s 新路径"参数。

依赖

如果使用android-m2d,在eclipse中写好依赖配置(<dependency>),保存之后就会自动去仓库下载该插件。如果找不到就会用红线标出。

使用maven,只有在编译的时候才会去检查依赖。 

修改本地仓库默认路径

打开${M2_HOME}/conf/settings.xml,可以找到这句被注释的配置:

将/path/to/local/repo替换为自己的路径即可。

如果使用android-m2e插件,直接在eclipse中设置即可。

配置代理仓库(私有库)的位置

代理仓库的配置可以放在pom.xml中,但放在用户配置中可以省去很多麻烦。配置好代理仓库后,本地工程依赖的构件都将从配置指定的远程仓库下载。但请注意,此配置仅用于下载构件,无法通过此配置发布构件。

配置文件内容参考: 

...     
          
               
repository
               
                    
                         
REPOSITORY-ID
                         
REPOSITORY-URL
                         
                              
true
                         
                         
                              
true
                         
                    
               
          
     
     
          
repository
     
...

将以上配置添加到用户配置中,有几个重要元素

REPOSITORY-ID:远程仓库id

REPOSITORY-URL:指定远程仓库的url

<releases>:是否启用发布构件的下载

<snapshots>:是否启用快照构件的下载。对于快照版本,如果链接的是中央仓库,由于快照版本不稳定,所以一般会推荐禁用快照版本的下载。但对于代理仓库,在多人合作开发的时候快照版本是有必要开启的。 

对于<snapshots>元素,可以通过<updatePolicy>为其指定检查快照版本的策略。

默认情况下,maven每天检查一次快照版本的更新。<updatePolicy>的值有:

daily:每天检查一次,默认

never:从不检查

always:每次构建都会检查

interval:X 每隔X分钟检查一次,X为任意整数。

true
always

发布构建所需的配置

远程仓库配置

该配置必须放在pom.xml中。在pom.xml中指定发布版和快照版仓库的位置:

     
          
发布版仓库
          
发布版仓库名称
          
发布版仓库url
     
     
          
快照版仓库
          
快照版仓库名称
          
快照版仓库url
     

id和url构成了远程仓库的唯一标识,name只是方便阅读。 

配置认证信息

该配置要放在用户或全局配置中:

     
         
          
发布版仓库id
          
admin
          
123456
     
     
          
快照版仓库id
          
admin
          
123456
     

需要注意的是,认证信息中的<id>应该对应在pom.xml中配置的仓库<id>。

依赖管理

对于Jar的依赖

如果使用了android-m2e插件,无需自行下载和添加jar到classpath,只需在pom.xml中配置好依赖(<dependencies>),之后maven会增加一个Maven Dependencies:

154524_GsfC_1428229.jpeg&middot;

然后就可以在代码中引用了。

对于库工程的依赖

同jar一样,直接在<denpencies>中配置好了。虽然执行maven命令可以直接编译通过,但是ADT本身不支持从Maven仓库中直接引用。因此不得不将库工程下载到workplace,导入eclipse,然后设置为library,再让自己的工程引用该library。

发布jar到本地仓库

工程中依赖的jar包,在中央仓库上不一定有自己想要的版本,可以将项目组所需的版本上传到代理仓库,个人的话在本地仓库安装一份也可以。

比如我们要基于API 11进行编译,需要android-11/android.jar,那么进入到${ANDROID_HOME}/platforms/android-11,执行下面的命令:

mvn install:install-file -Dfile=android.jar -DgroupId=com.google.android -DartifactId=android -Dversion=3.0 -Dpackaging=jar

如此,在无需pom.xml文件的情况下将jar包发布到本地仓库中。这样我们就可以在pom.xml中配置新的android依赖。

对于install-file,各参数的含义非常好理解,其中-Dfile是将要发布到仓库的包的位置,剩余的则是maven坐标以及打包类型。

发布库工程到本地仓库

我们自己写的库工程,将<packaging>改为apklib,执行install命令就好了。

以support-v7为例,操作步骤如下:

1. 用SDK Manager将support-v7下载到本地;

2. 将${ANDROID_HOME}/extras/android/support/v7/appcompat代码导入eclipse,将工程转为maven工程;

3. 将工程依赖的两个jar包先安装到本地仓库,进入${ANDROID_HOME}/extras/android/support/v7/appcompat/libs目录:

mvn install:install-file -Dfile=android-support-v7-appcompat.jar -DgroupId=com.google.android -DartifactId=android-support-v7-appcompat -Dversion=r7 -Dpackaging=jarmvn install:install-file -Dfile=android-support-v4.jar -DgroupId=com.google.android -DartifactId=support-v4 -Dversion=r7 -Dpackaging=jar

4. 修改pom.xml文件,增加对上面两个jar包的依赖:

com.google.android
android-support-v7-appcompat
r7
com.google.android
support-v4
r7

5. 执行命令:mvn clean install

注意,再添加这两个依赖的时候,<scope>最好不要设置为provided。使用默认的compile可以使得这两个jar在依赖工程中可见,这样就无需再引用这两个jar

其他的库工程发布方法同上,接着是修改需要依赖support-v7的工程的pom.xml文件,增加依赖:

com.google.android
support-v7-appcompat
r7
apklib

此时执行mvn clean install即可。

针对support-v7的简便安装方法

上面只是演示如何发布一个库工程,实际对于support-v7,可以不用建立maven工程,采用下面的方法更加简洁:

1. 进入${ANDROID_HOME}/extras/android/support/v7/appcompat,将目录下所有文件打包为support-v7-appcompat.zip,名字可以任意;

2. 执行命令: 

mvn install:install-file -Dfile=support-v7-appcompat.zip -DgroupId=com.google.android -DartifactId=support-v7-appcompat -Dversion=r7 -Dpackaging=apklib

接下来执行上面的第3步安装好support-v7依赖的jar包,最后在自己的工程的pom.xml中需要添加如下依赖:

    
        
com.google.android
        
support-v7-appcompat
        
r7
        
apklib
    
    
        
com.google.android
        
support-v4
        
r7
        
jar
    
    
        
com.google.android
        
support-v7-appcompat
        
r7
        
jar
    

编译版本与android-m2e依赖的sdk版本关系

下面的配置指明的sdk版本用于编译:

    
com.google.android
    
android
    
4.1.1.4
    
provided

在maven执行的过程中,对应的阶段是:

maven-compiler-plugin:3.1:compile

在这一步实际调用了javac命令来编译源码,在命令行中,加上-X参数即可看到该阶段的执行命令。

在命令中找到Command line options:字样,从,-classpath中可以找到类似于下面的日志:

/Users/madmatrix/.m2/repository/com/google/android/android/4.1.1.4/android-4.1.1.4.jar

可以看到最后的android-4.1.1.4.jar即为<version>指定版本。

下面配置是android-maven-plugin插件的定义以及依赖的sdk版本:

    
com.jayway.maven.plugins.android.generation2
    
android-maven-plugin
    
${android.plugin.version}
    
            
            
11
        
                
            
true
        
        
false
    

android-maven-plugin插件参与了下面的阶段:

android-maven-plugin:3.8.2:generate-sources

这一阶段是将assert、res等资源文件打包。实际调用的android命令是aapt(Android Asset Packaging Tool)

该命令需要某个平台的android.jar包:

${ANDORID_HOME}/build-tools/android-xxx/aapt package -f --no-crunch -I, ${ANDORID_HOME}/platforms/android-xx/android.jar。

上面命令红色标注的api level就是<platform>元素值。意思就是在打包资源的时候,依赖哪个api level的jar包。

可见,这两处的sdk版本虽然配置方式不同(一个用version,一个用api level),但应该统一。可以统一定义在<properties>,例如:

UTF-8
3.0
11
3.8.2

参考

转载于:https://my.oschina.net/madmatrix/blog/292570

你可能感兴趣的文章
各大名企笔试及面经大全(程序猿必读)
查看>>
Oracle 连接、会话数的查看,修改
查看>>
Oracle 11g password过期被锁定报道 ORA-28000 the account is locked
查看>>
轨磁条简介
查看>>
大厂前端高频面试问题与答案精选
查看>>
如何设计高扩展的在线网页制作平台
查看>>
Git 2.5增加了工作树、改进了三角工作流、性能等诸多方面
查看>>
深度揭秘腾讯云低功耗广域物联网LPWAN 技术及应用
查看>>
More than React(四)HTML也可以静态编译?
查看>>
React Native最佳学习模版- F8 App开源了
查看>>
云服务正在吞噬世界!
查看>>
Web语义化标准解读
查看>>
高性能 Lua 技巧(译)
查看>>
区分指针、变量名、指针所指向的内存
查看>>
最近话题火爆的四件事你知道不?
查看>>
SpringBoot整合MyBatis
查看>>
Android 类库书签更新(一)
查看>>
Unity3D Input按键系统
查看>>
简单的一条SQL,不简单的做事思维 NOT IN 、NOT EXISTS、LEFT JOIN用法差别 ...
查看>>
DataWorks:任务未运行自助排查
查看>>