Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Introduction to Maven
Search
Sperasoft
August 28, 2013
Technology
180
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Introduction to Maven
Maven
Sperasoft
August 28, 2013
More Decks by Sperasoft
See All by Sperasoft
Code and Memory Optimisation Tricks
sperasoft
0
120
The Theory of Relational Databases
sperasoft
0
130
Automated Layout testing using Galen framework
sperasoft
0
120
Sperasoft talks: Android Security Threats
sperasoft
0
290
JPoint 2015: Java technology conference overview
sperasoft
0
75
RxJava: Functional Reactive Programming on Android
sperasoft
0
280
Effective Мeetings
sperasoft
0
150
Unreal Engine 4 Introduction
sperasoft
0
250
JIRA Development
sperasoft
0
270
Other Decks in Technology
See All in Technology
ファミコンでPHPを動かす / PHP on the Famicom
tomzoh
2
620
AIツールを導入しても生産性はあがらない? カオナビが直面した 3つの壁と乗り越え方。/ Overcoming 3 Barriers to AI-Driven Productivity at kaonavi
kaonavi
0
200
kaonavi Tech Night#1
kaonavi
0
160
大量データに対しても、生成AIを用いてリーズナブルにデータ加工をしたい!Databricksのai_queryについて調べてみた
kamoshika
1
280
「休む」重要さ
smt7174
6
1.6k
ゴールデンパスは敷いただけでは道にならない ─ 企画部門のエンジニアが技術標準を事業価値に変えるまで
mhrtech
1
260
人とエージェントが高め合う協業設計
kintotechdev
0
760
10年目を迎えた「ABEMA」がどのように AI 活用を推進して、AI 駆動開発にシフトしているのか / How ABEMA, entering its 10th year, is promoting the use of AI and shifting toward AI-driven development
miyukki
0
370
仕様駆動開発、導入半年。「本当に速くなってるの?」にデータで答える / AICon2026_hirakawa
rakus_dev
0
320
AI工学特論: MLOps・継続的評価
asei
5
1.3k
データと地図で読む 大井町の「かわるもの、かわらないもの」
yoshiyama_hana
0
150
AI時代こそ、スケールしないことをしよう -「作る人」から「なぜ作るか」を考える人へ / Do Things That Don't Scale in the AI Era — From How to Why
kaminashi
1
100
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
340
58k
Git: the NoSQL Database
bkeepers
PRO
432
67k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
900
Documentation Writing (for coders)
carmenintech
77
5.4k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Navigating Weather and Climate Data
rabernat
0
400
Building Applications with DynamoDB
mza
96
7.1k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.6k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Un-Boring Meetings
codingconduct
0
350
Site-Speed That Sticks
csswizardry
13
1.3k
Transcript
Introduction to Maven
• Maven goal and key ideas • Configuration by conventions
• Project layout • Build lifecycle • Dependency management TOC
Software Development
Software Discrepancy
Software Discrepancy Solution
• shell script • make (1977) • Apache Ant (2000)
• MSBuild (2005) • Apache Maven (2002) Examples: Build tools
make
Maven Vs. Ant Holy War
<?xml version="1.0" encoding="UTF-8"?> <project name="AntProject" basedir="." default="jar"> <property file="nbproject/nbjdk.properties"/> <property
name="user.properties.file" location="${netbeans.user}/build. properties"/> <property file="${user.properties.file}"/> <import file="nbproject/jdk.xml"/> <target name="-init" depends="-jdk-init"> <property file="user.build.properties"/> <property file="build.properties"/> </target> <target name="compile" depends="-init" description="Compile main sources."> <mkdir dir="${classes.dir}"/> <depend srcdir="${src.dir}" destdir="${classes.dir}" cache="build/depcache" <classpath path="${cp}"/> </depend> <javac srcdir="${src.dir}" destdir="${classes.dir}" source="1.5" debug="${d <classpath path="${cp}"/> <compilerarg value="-Xlint:unchecked"/> </javac> <copy todir="${classes.dir}"> <fileset dir="${src.dir}" excludes="${jar.excludes}"/> </copy> </target> <target name="jar" depends="compile" description="Build JAR file for main sour <jar jarfile="${jar}" compress="true"><!-- manifest="${manifest}" --> <fileset dir="${classes.dir}"/> </jar> </target> Example: Ant Script <target name="run" depends="compile" description="Run application."> <fail unless="main.class">Must set property 'main.class' (e.g. in build.pro <java classname="${main.class}" fork="true" failonerror="true"> <classpath path="${run.cp}"/> <jvmarg value="-ea"/> </java> </target> <target name="compile-tests" depends="compile"> <mkdir dir="${test.classes.dir}"/> <depend srcdir="${test.dir}" destdir="${test.classes.dir}" cache="build/test <classpath path="${test.cp}"/> </depend> <javac srcdir="${test.dir}" destdir="${test.classes.dir}" source="1.5" debug <classpath path="${test.cp}"/> <compilerarg value="-Xlint:unchecked"/> </javac> <copy todir="${test.classes.dir}"> <fileset dir="${test.dir}" excludes="${jar.excludes}"/> </copy> </target> <target name="run-tests" depends="compile-tests" description="Run JUnit tests." <mkdir dir="${test.results.dir}"/> <junit failureproperty="tests.failed" showoutput="true" fork="true"> <batchtest todir="${test.results.dir}"> <fileset dir="${test.dir}"> <include name="**/*Test.java"/> </fileset> </batchtest> <classpath path="${test.run.cp}"/> <formatter type="brief" usefile="false"/> <formatter type="xml"/> </junit>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:x <modelVersion>4.0.0</modelVersion> <groupId>com.sperasoft</groupId> <artifactId>helloworld</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> </project> Example:
Maven POM
Download: http://maven.apache.org Version: 2.2.1 Requires: JDK 5+ Nature: Java command
line program Invocation: mvn Apache Maven
1. Get apache-maven-2.2.1-bin.zip 2. Unpack it to a folder 3.
Set M2_HOME env var to the above folder Install Apache Maven
"A maven (also mavin) is a trusted expert in a
particular field, who seeks to pass knowledge on to others." (http://en.wikipedia.org/wiki/Maven) or Configuration by Convention or Do it right way Quote
1. Project layout 2. Build lifecycle Maven Conventions
Simple Project Layout
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:x <modelVersion>4.0.0</modelVersion> <groupId>com.sperasoft</groupId> <artifactId>helloworld</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> </project> pom.xml
Project Layout: Typical
Lifecycles • Default lifecycle (build) • Clean lifecycle • Site
lifecycle Build Lifecycle
Default Lifecycle
compiler compiler:compile compiler:testCompile Example: Compiler Plugin
Lifecycle Bindings: jar
Lifecycle Bindings: pom
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:x <modelVersion>4.0.0</modelVersion> <groupId>com.sperasoft</groupId> <artifactId>helloworld</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> </project> pom.xml:
packaging
Clean lifecycle bindings
• Dependency identification • Getting dependency Dependency Management Basis Maven
Coordinates Repositories
groupId: org.testng artifactId: testng version: 5.11 packaging: jar classifier: jdk15
Maven Coordinates
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:x <modelVersion>4.0.0</modelVersion> <groupId>com.sperasoft</groupId> <artifactId>helloworld</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> </project> pom.xml:
coordinates
Artifact Resolution
Local Repository
Local Repository Population
http://repo1.maven.org/maven2 Number of artifacts (GAV): 313,955 Number of unique artifacts
(GA): 38,372 Size of repository: 457,310 MB Maven Central
Artifact Resolution
1. Choose a library 2. Find Maven coordinates 3. Add
<dependency> to POM 4. Use it in your code Using External Libs
1. Good quality 2. Mature 3. Supported 4. Local expertise
5. Has a reliable source External Lib Selection
1. Maven Central search 2. Project documentation / site 3.
Google 4. Not found? Do not use this crap. Where to Find Maven Coordinates
http://search.maven.org/ Maven Central Search
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:x ... <dependencies> ... <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.5</version>
</dependency> ... </dependencies> ... </project> POM: Add Dependency
1. Dependency management explained 2. IDE (Eclipse) integration 3. Testing
with Maven 4. Building web applications 5. Serving static content 6. Using binary libs Maven Talks: Next