将一个Android项目修改为能够使用Maven进行构建
初学maven,本文展示将一个已有的项目经过修改后直接用Maven进行编译、生成apk文件并安装到手机运行的过程。不涉及Eclipse及其maven插件。
将要修改的Demo的基本功能参见:http://blog.csdn.net/winstonwolfe/article/details/28425973文中所建立的待测应用。
因为在使用maven构建android项目的时需要用到一些插件,而SDK、插件、maven的版本都会对结果有所影响。这里我成功实现了将一个现有的Android项目使用maven构建,所用的一些工具的版本信息如下:
Maven版本是3.1.1
AndroidAPI level 19
android-maven-plugin版本是3.8.1
修改原项目的源文件路径,在src文件夹下新建main文件夹,再在main文件夹下新建java子文件夹,然后将原src目录下的代码文件剪切至src\main\java路径下。
在项目根目录下编写一个pom.xml文件,具体内容如下:
<?xmlversion="1.0" encoding="UTF-8"?>
<projectxmlns="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.0http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.winstonwolfe.demo</groupId>
<artifactId>Demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>apk</packaging> #这里指定了打包成apk的行为
<name>Demo</name>
<dependencies>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
<version>2.1.2</version>
<scope>provided</scope> #provided指明了不要将androidsdk打包
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<configuration>
<androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile>
<assetsDirectory>${project.basedir}/assets</assetsDirectory>
<resourceDirectory>${project.basedir}/res</resourceDirectory>
<nativeLibrariesDirectory>${project.basedir}/src</nativeLibrariesDirectory>
<sdk>
<platform>19</platform>
</sdk>
<undeployBeforeDeploy>true</undeployBeforeDeploy>
</configuration>
<extensions>true</extensions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
连接上android设备,然后通过命令行进入到pom文件所在目录下,执行命令:
mvn install android:deploy android:run
执行成功后,会自动在手机端运行Demo。
附:
Maven的基本应用笔记(参考自《Maven实战》)
1.安装、配置环境变量,需要依赖%JAVA_HOME%变量,过程略。
2.编写一个pom.xml来定义一个Maven项目:
<?xmlversion=”1.0”encoding=”UTF-8” ?>
<project xmlns=”...” xmlns:xsi=”…” xsi:schemaLocation = “…”>
<modelVersion>4.0.0 </modelVersion> #当前POM模型的版本
<groupId>com.winstonwolfe.maven</groupId> #公司及项目名
<artifactId>helloworld </ artifactId > #当前Maven项目在组中的唯一ID
<version>1.0-SNAPSHOT</version>#当前Maven项目的版本,SNAPSHOT说明该项目还处于开发中,不稳定
<name>MavenHello World Project</name>
</project>
3.编写主代码:Maven假设项目主代码位于src/main/java目录中,假设测试代码位于src/test/java目录中。项目主代码会被打包到最终的构建中(如jar包),而测试代码只在运行测试的时候用到,不会被打包。src目录与pom.xml文件平行。
在src/main/java/com/winstonwolfe/maven/helloworld目录下新建HelloWorld.java文件,内容如下:
packagecom.winstonwolfe.maven.helloworld;
publicclass HelloWorld{
publicString sayHello(){
return“Hello Maven”;
}
Publicstatic void main( String[] args){
System.out.print(new HelloWorld().sayHello() );
}
}
4.使用maven进行编译:cd到pom文件所在目录,执行命令maven clean compile
初次运行,会自动下载远程文件来填充本地仓库
maven本地仓库路径C:\Documents andSettings\Administrator\.m2\repository
下载完成后再次执行maven clean compile,如下提示项目编译成功:
生成的class文件位置为:com\winstonwolfe\maven\helloworld\HelloWorld.class
5.编写测试代码:
为项目的pom添加一个JUnit依赖。
<?xmlversion="1.0" encoding="UTF-8" ?>
<project>
<modelVersion>4.0.0 </modelVersion>
<groupId>com.winstonwolfe.maven</groupId>
<artifactId>helloworld </artifactId >
<version>1.0-SNAPSHOT</version>
<name>MavenHello World Project</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>#指定有效范围是test,即这是一个测试时的依赖
</dependency>
</dependencies>
</project>
在src/test/java目录下创建测试文件:HelloWorldTest.java,内容如下:
packagecom.winstonwolfe.maven.helloworld;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class HelloWorldTest{
@Test
public voidtestSayHello(){
HelloWorld helloWorld= new HelloWorld();
String result =helloWorld.sayHello();
assertEquals("HelloMaven", result);
}
}
调用Maven测试命令: mvn clean test:
测试结果如下:
6.将项目打包
执行命令 mvn clean package,默认打包的类型为jar,Maven会在打包之前执行编译、测试等操作:
如果要想其他的Maven项目能够访问这个jar包,则需要将它安装到本地仓库中,通过执行mvn cleaninstall命令实现,安装后可以在本地仓库看到该jar包及pom等信息。
注:Maven的生命周期:compile-> test -> package -> install
如果想要生成可以直接执行的jar包,需要使用maven-shade-plugin插件,修改pom文件添加该插件如下:
<?xmlversion="1.0" encoding="UTF-8" ?>
<project>
<modelVersion>4.0.0 </modelVersion>
<groupId>com.winstonwolfe.maven</groupId>
<artifactId>helloworld </artifactId >
<version>1.0-SNAPSHOT</version>
<name>MavenHello World Project</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformerimplementation = "org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.winstonwolfe.maven.helloworld.HelloWorld </mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>