Using Maven to build Java & Android program

87
Using Maven to build Java & Android program Kewang

description

 

Transcript of Using Maven to build Java & Android program

Page 1: Using Maven to build Java & Android program

Using Maven to build Java & Android program

Kewang

Page 2: Using Maven to build Java & Android program

2

Install Maven

● Download from [HERE](http://maven.apache.org/download.cgi)– Or apt-get / yum / brew ......

● Add env.– M2_HOME=/opt/maven– M2=$M2_HOME/bin

● Run mvn --version– verify mvn is installed correctly.

Page 3: Using Maven to build Java & Android program

3

About me

● 王慕羣 (Kewang)● Skills

– Android– AWS (EC2, S3, DynamoDB)– Hadoop (HBase, MapReduce)– Node.js, Rails

● Company– Mitake Inc.

● Others– Google Play, GitHub, slideshare, Scribd

Page 4: Using Maven to build Java & Android program

Maven

Page 5: Using Maven to build Java & Android program

5

Maven's objectives

● Making the build process easy● Providing a uniform build system● Providing quality project information● Providing guidelines for best practices development● Allowing transparent migration to new features

Page 6: Using Maven to build Java & Android program

6

Maven can manage ...

● Builds● Documentation● Reporting● Dependencies● SCMs● Releases● Distribution

Page 7: Using Maven to build Java & Android program

7

Maven's concepts

● Project Object Model● Convention over Configuration (CoC)● Dependency management● Plugin-based architecture

Page 8: Using Maven to build Java & Android program

8

Project Object Model

Page 9: Using Maven to build Java & Android program

9

Project Object Model

<project> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>my-app</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies></project>

Page 10: Using Maven to build Java & Android program

10

Convention over Configuration

Page 11: Using Maven to build Java & Android program

11

Convention over Configuration

<sourceDirectory>/tmp/tts/src</sourceDirectory><scriptSourceDirectory>/tmp/tts/src/main/scripts</scriptSourceDirectory><testSourceDirectory>/tmp/tts/src/test/java</testSourceDirectory><outputDirectory>/tmp/tts/target/classes</outputDirectory><testOutputDirectory>/tmp/tts/target/test-classes</testOutputDirectory><resources> <resource> <directory>/tmp/tts/src/main/resources</directory> </resource></resources><testResources> <testResource> <directory>/tmp/tts/src/test/resources</directory> </testResource></testResources>

mvn help:effective-pom

Page 12: Using Maven to build Java & Android program

12

Convention over Configuration

<sourceDirectory>/tmp/tts/src</sourceDirectory><scriptSourceDirectory>/tmp/tts/src/main/scripts</scriptSourceDirectory><testSourceDirectory>/tmp/tts/src/test/java</testSourceDirectory><outputDirectory>/tmp/tts/target/classes</outputDirectory><testOutputDirectory>/tmp/tts/target/test-classes</testOutputDirectory><resources> <resource> <directory>/tmp/tts/src/main/resources</directory> </resource></resources><testResources> <testResource> <directory>/tmp/tts/src/test/resources</directory> </testResource></testResources>

mvn help:effective-pom

Page 13: Using Maven to build Java & Android program

13

Dependency management

Page 14: Using Maven to build Java & Android program

14

Dependency management

<dependencies> <dependency> <groupId>android</groupId> <artifactId>android</artifactId> <version>2.3.3_r2</version> <scope>provided</scope> </dependency></dependencies>

Page 15: Using Maven to build Java & Android program

15

Dependency management

<dependencies> <dependency> <groupId>android</groupId> <artifactId>android</artifactId> <version>2.3.3_r2</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.squareup.picasso</groupId> <artifactId>picasso</artifactId> <version>2.2.0</version> </dependency></dependencies>

Page 16: Using Maven to build Java & Android program

16

Plugin-based architecture

Page 17: Using Maven to build Java & Android program

17

Plugin-based architecture

<plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <configuration> <mainClass>com.mycompany.example.App</mainClass> </configuration> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.0</version> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin></plugins>

Page 18: Using Maven to build Java & Android program

Maven lifecycle & commands

Page 19: Using Maven to build Java & Android program

19

Maven lifecycle

Page 20: Using Maven to build Java & Android program

20

Maven commands

● mvn clean– Remove all previous build generated files.

● mvn compile– Compile the source code of the project.

● mvn test– Run tests using a suitable unit testing framework.

● mvn package– Package compiled code to distributable format.

● mvn install– Install the package into the local repository.

● mvn deploy– Copy the final package to the remote repository.

Page 21: Using Maven to build Java & Android program

Build a simple Java project

Page 22: Using Maven to build Java & Android program

22

Step by step

● Normalize directory structure● Write pom.xml● Run it

Page 23: Using Maven to build Java & Android program

23

Normalize directory structure

Page 24: Using Maven to build Java & Android program

24

Or maven-archetype-quickstart

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Page 25: Using Maven to build Java & Android program

25

Write pom.xml

<project> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>my-app</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies></project>

Page 26: Using Maven to build Java & Android program

26

mvn clean compile

Page 27: Using Maven to build Java & Android program

27

mvn clean compile

only compiled class

Page 28: Using Maven to build Java & Android program

28

mvn clean package

Page 29: Using Maven to build Java & Android program

29

mvn clean package

include test file, jar file...

Page 30: Using Maven to build Java & Android program

but it can't run ...

Page 31: Using Maven to build Java & Android program

31

mvn clean compile exec:java

<build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <configuration> <mainClass>com.mycompany.example.App</mainClass> </configuration> </plugin> </plugins></build>

Page 32: Using Maven to build Java & Android program

32

mvn clean compile exec:java

<build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <configuration> <mainClass>com.mycompany.example.App</mainClass> </configuration> </plugin> </plugins></build>

remember assign <mainClass/>

Page 33: Using Maven to build Java & Android program

Live DEMO

Page 34: Using Maven to build Java & Android program

Apply Maven to Android

Page 35: Using Maven to build Java & Android program

35

Project directory structure

Page 36: Using Maven to build Java & Android program

36

Step by step

● Install Android SDK● Run Maven Android SDK Deployer● Write pom.xml● Run it

Page 37: Using Maven to build Java & Android program

37

Install Android SDK, at least ...

● All versions SDK Platform● All versions Google APIs● All Extra items (including obsoleted)● Glass Development Kit Sneak Peek

Page 38: Using Maven to build Java & Android program

38

Run Maven Android SDK Deployer

● Checkout mosabua/maven-android-sdk-deployer● mvn install

Page 39: Using Maven to build Java & Android program

39

Run Maven Android SDK Deployer

● Checkout mosabua/maven-android-sdk-deployer● mvn install

copy all jar files to maven repository

Page 40: Using Maven to build Java & Android program

40

Use Android libraries like ...

<dependency> <groupId>android</groupId> <artifactId>android</artifactId> <version>4.4_r1</version> <scope>provided</scope></dependency>

Page 41: Using Maven to build Java & Android program

41

Use Android libraries like ...

<dependency> <groupId>android</groupId> <artifactId>android</artifactId> <version>4.4_r1</version> <scope>provided</scope></dependency>

"provided" stands for only compile, not package itself

Page 42: Using Maven to build Java & Android program

42

Use Android libraries like ...

<dependency> <groupId>com.google.android.maps</groupId> <artifactId>maps</artifactId> <version>19_r1</version> <scope>provided</scope></dependency>

Page 43: Using Maven to build Java & Android program

43

Use Android libraries like ...

<dependency> <groupId>android.support</groupId> <artifactId>compatibility-v13</artifactId> <version>19.0.1</version></dependency>

Page 44: Using Maven to build Java & Android program

Write pom.xml

Page 45: Using Maven to build Java & Android program

45

<project> tags

<packaging>apk</packaging>

Page 46: Using Maven to build Java & Android program

46

<dependencies> tags

<dependency> <groupId>android</groupId> <artifactId>android</artifactId> <version>4.0_r3</version> <scope>provided</scope></dependency><dependency> <groupId>android.support</groupId> <artifactId>compatibility-v4</artifactId> <version>19.0.1</version></dependency>

Page 47: Using Maven to build Java & Android program

47

<plugins> tags

<plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>android-maven-plugin</artifactId> <version>3.8.1</version> <extensions>true</extensions> <configuration> <sdk> <platform>14</platform> </sdk> </configuration></plugin>

Page 48: Using Maven to build Java & Android program

48

mvn clean package

Page 49: Using Maven to build Java & Android program

49

mvn clean package

generates R.java

Page 50: Using Maven to build Java & Android program

50

mvn android:deploy android:run

● mvn android:deploy– Install app to device

● mvn android:run– Run app at device

Page 51: Using Maven to build Java & Android program

Live DEMO

Page 52: Using Maven to build Java & Android program

52

android-maven-plugin FAQ

Page 53: Using Maven to build Java & Android program

53

android-maven-plugin FAQ

● No Android SDK path could be found.

Page 54: Using Maven to build Java & Android program

54

android-maven-plugin FAQ

● No Android SDK path could be found.– no ANDROID_HOME env., or value is incorrect

● set ANDROID_HOME env. to Android SDK path

Page 55: Using Maven to build Java & Android program

55

android-maven-plugin FAQ

● No Android SDK path could be found.– no ANDROID_HOME env., or value is incorrect

● set ANDROID_HOME env. to Android SDK path

● Unknown packaging: apk

Page 56: Using Maven to build Java & Android program

56

android-maven-plugin FAQ

● No Android SDK path could be found.– no ANDROID_HOME env., or value is incorrect

● set ANDROID_HOME env. to Android SDK path

● Unknown packaging: apk– no extensions tag, or value is not "true"

● <extensions>true</extensions>

Page 57: Using Maven to build Java & Android program

57

android-maven-plugin FAQ

● No Android SDK path could be found.– no ANDROID_HOME env., or value is incorrect

● set ANDROID_HOME env. to Android SDK path

● Unknown packaging: apk– no extensions tag, or value is not "true"

● <extensions>true</extensions>

● package R does not exist

Page 58: Using Maven to build Java & Android program

58

android-maven-plugin FAQ

● No Android SDK path could be found.– no ANDROID_HOME env., or value is incorrect

● set ANDROID_HOME env. to Android SDK path

● Unknown packaging: apk– no extensions tag, or value is not "true"

● <extensions>true</extensions>

● package R does not exist– <packaging>jar</packaging>

● <packaging>apk</packaging>

Page 59: Using Maven to build Java & Android program

59

android-maven-plugin FAQ

● No Android SDK path could be found.– no ANDROID_HOME env., or value is incorrect

● set ANDROID_HOME env. to Android SDK path

● Unknown packaging: apk– no extensions tag, or value is not "true"

● <extensions>true</extensions>

● package R does not exist– <packaging>jar</packaging>

● <packaging>apk</packaging>

● Ill-advised or mistaken usage of a core class

Page 60: Using Maven to build Java & Android program

60

android-maven-plugin FAQ

● No Android SDK path could be found.– no ANDROID_HOME env., or value is incorrect

● set ANDROID_HOME env. to Android SDK path

● Unknown packaging: apk– no extensions tag, or value is not "true"

● <extensions>true</extensions>

● package R does not exist– <packaging>jar</packaging>

● <packaging>apk</packaging>

● Ill-advised or mistaken usage of a core class– no scope tag, or value is not "provided"

● <scope>provided</scope>

Page 61: Using Maven to build Java & Android program

Eclipse tipsIMPORTANT !!!

Page 62: Using Maven to build Java & Android program

62

Tips - How to use src folder ?

Page 63: Using Maven to build Java & Android program

63

Tips - How to use src folder ?

<build> <sourceDirectory>src</sourceDirectory></build>

Page 64: Using Maven to build Java & Android program

64

Tips - How to use libs folder ?

Page 65: Using Maven to build Java & Android program

65

Tips - How to use libs folder ?

● mvn install:install-file– -Dfile=<path-to-file>– -DgroupId=<group-id>– -DartifactId=<artifact-id>– -Dversion=<version>– -Dpackaging=jar

Page 66: Using Maven to build Java & Android program

66

Tips - How to use libs folder ?

● mvn install:install-file– -Dfile=<path-to-file>– -DgroupId=<group-id>– -DartifactId=<artifact-id>– -Dversion=<version>– -Dpackaging=jar

● mvn install:install-file -Dfile=flappybird.jar -DgroupId=tw.kewang -DartifactId=flappybird -Dversion=1.0 -Dpackaging=jar

Page 67: Using Maven to build Java & Android program

67

Tips - How to use libs folder ?

● mvn install:install-file– -Dfile=<path-to-file>– -DgroupId=<group-id>– -DartifactId=<artifact-id>– -Dversion=<version>– -Dpackaging=jar

● mvn install:install-file -Dfile=flappybird.jar -DgroupId=tw.kewang -DartifactId=flappybird -Dversion=1.0 -Dpackaging=jar

copy jar file to maven repository

Page 68: Using Maven to build Java & Android program

68

Tips - How to use gen folder ?

Page 69: Using Maven to build Java & Android program

69

Tips - How to use gen folder ?<plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>android-maven-plugin</artifactId> <configuration> <genDirectory>gen</genDirectory> </configuration></plugin>

Page 70: Using Maven to build Java & Android program

70

Tips - How to use gen folder ?<plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>android-maven-plugin</artifactId> <configuration> <genDirectory>gen</genDirectory> </configuration></plugin>

<plugin> <artifactId>maven-clean-plugin</artifactId> <version>2.5</version> <configuration> <filesets> <fileset> <directory>gen</directory> </fileset> </filesets> </configuration></plugin>

Page 71: Using Maven to build Java & Android program

71

Tips - How to use gen folder ?<plugin> <groupId>com.jayway.maven.plugins.android.generation2</groupId> <artifactId>android-maven-plugin</artifactId> <configuration> <genDirectory>gen</genDirectory> </configuration></plugin>

<plugin> <artifactId>maven-clean-plugin</artifactId> <version>2.5</version> <configuration> <filesets> <fileset> <directory>gen</directory> </fileset> </filesets> </configuration></plugin>

remember clean gen folder

Page 72: Using Maven to build Java & Android program

72

Tips - How to clean bin folder ?

<plugin> <artifactId>maven-clean-plugin</artifactId> <version>2.5</version> <configuration> <filesets> <fileset> <directory>bin</directory> </fileset> </filesets> </configuration></plugin>

Page 73: Using Maven to build Java & Android program

73

Tips - How to use library project ?

Page 74: Using Maven to build Java & Android program

74

Tips - How to use library project ?

● Write pom.xml at library project as general Android project

Page 75: Using Maven to build Java & Android program

75

Tips - How to use library project ?

● Write pom.xml at library project as general Android project

● mvn clean android:apklib– Apklib file includes src/main/java, libs & res directory

Page 76: Using Maven to build Java & Android program

76

Tips - How to use library project ?

● Write pom.xml at library project as general Android project

● mvn clean android:apklib– Apklib file includes src/main/java, libs & res directory

● Use install goal to copy apklib to maven repository

Page 77: Using Maven to build Java & Android program

77

Tips - How to use library project ?

● Write pom.xml at library project as general Android project

● mvn clean android:apklib– Apklib file includes src/main/java, libs & res directory

● Use install goal to copy apklib to maven repository● Add dependency at main project

<dependency> <groupId>tw.kewang.ui.captchaview</groupId> <artifactId>CaptchaView</artifactId> <version>1.0.0</version> <type>apklib</type></dependency>

Page 78: Using Maven to build Java & Android program

78

Tips - How to use non-maven library ?

● Compress non-maven library to zip file

Page 79: Using Maven to build Java & Android program

79

Tips - How to use non-maven library ?

● Compress non-maven library to zip file● Use install goal to copy zip to maven repository

– packaging=apklib

Page 80: Using Maven to build Java & Android program

80

Tips - How to use non-maven library ?

● Compress non-maven library to zip file● Use install goal to copy zip to maven repository

– packaging=apklib● Add dependency at main project

<dependency> <groupId>tw.kewang.ui.captchaview</groupId> <artifactId>CaptchaView</artifactId> <version>1.0.0</version> <type>apklib</type></dependency>

Page 81: Using Maven to build Java & Android program

Show Timegithub://kewangtw

Page 82: Using Maven to build Java & Android program

82

Show Time - google-tts

tts.say(sentence, true, new OnFinishListener() { @Override public void onFinish() { Toast.makeText(this, sentence, Toast.LENGTH_SHORT).show(); }});

Page 83: Using Maven to build Java & Android program

83

Show Time - map-controller

mc.startTrackMyLocation(new ChangeMyLocation() { @Override public void changed(GoogleMap map, Location location) { Log.d("TRACK", location.toString()); }});

mc.whenMapClick(new ClickCallback() { @Override public void clicked(GoogleMap map, LatLng latLng) { Log.d("CLICK", latLng.toString()); }});

Page 84: Using Maven to build Java & Android program

84

Show Time - CaptchaView

captcha.setPattern("1234567890");captcha.setLength(6);captcha.refresh();

if (captcha.getCaptcha().equals(check)) { Log.d("CAPTCHA", "Success");} else { Log.d("CAPTCHA", "Fail");}

Page 85: Using Maven to build Java & Android program

85

Show Time - tile<tw.kewang.tile.Tile> <tw.kewang.tile.TileGroup tile:maxCells="3" tile:x="450dp" tile:y="50dp" > <tw.kewang.tile.TileCell tile:x="50dp" tile:y="50dp" /> <tw.kewang.tile.TileCell tile:x="100dp" tile:y="150dp" /> </tw.kewang.tile.TileGroup></tw.kewang.tile.Tile>

tile2.setOnCellLongClickListener(new OnLongClickListener() { @Override public void onLongClick(TileGroup group, TileCell cell) { tile2.startDrag(); }});

Page 86: Using Maven to build Java & Android program

86

References

● Apache Maven Project● Android Application Development with Maven● Android Maven Plugin● Maven Android SDK Deployer

Page 87: Using Maven to build Java & Android program

87