simplify your external dependency management - dpc11

86
Simplify your external dependency management v

Upload: stephan-hochdoerfer

Post on 13-Jan-2015

9.638 views

Category:

Documents


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Simplify your external dependency management - DPC11

Simplify your external dependency management

v

Page 2: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

About me

Stephan Hochdörfer, bitExpert AG

Department Manager Research Labs

enjoying PHP since 1999

[email protected]

@shochdoerfer

Page 3: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Dependencies?

Page 4: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Dependencies?

internalDependencies

externalDependencies

Page 5: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Dependencies?external

Dependencies

ExtensionsSystemtoolsFrameworks

Libs

Page 6: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Our first project....

Page 7: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Our first project....

+

Page 8: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Our first project – the structure

yourpoject |-application |-library |---Facebook |---Zend |-public |---js |---css |-tests

Page 9: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maintenance nightmare!

Page 10: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Version control, anyone?

Page 11: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Subversion – svn:externals

Page 12: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Git - Submodules

Page 13: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Git - Subtree

Page 14: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Recap

No overview of dependency configuration

Page 15: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Recap

Externals must be of the same type as the repository!

Page 16: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Recap

Commiting to Externals is possible!

Page 17: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Insight

You cannot control dependencies with a VCS!

Page 18: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Insight

A VCS is not made for dependency management!

Page 19: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Requirements first!

Page 20: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Do not hide dependency metadata!

Page 21: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Transitive dependencies

Page 22: Simplify your external dependency management - DPC11

v

Simplify your ext. dependency management

Do not reinvent the wheel

Page 23: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Separation from VCS

Page 24: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Mind change: Build process needed!

Page 25: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Step 1: Building the build

Page 26: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Step 2: Package the software

Page 27: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Step 3: Deliver the software

Page 28: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Build automation

Page 29: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Build automation

Page 30: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Build automation with Phing

<?xml version="1.0" encoding="UTF-8"?><project name="MyProject" default="build">

<target name="prepare"> <echo msg="Creating dir ./build" /> <mkdir dir="./build" /> </target>

<target name="build" depends="prepare"> <echo msg="Copying files..." /> <copy file="./info.php" tofile="./build/info.php" /> </target></project>

Page 31: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Build automation with pear

Page 32: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Build automation with pear pantr

pantr = project-based PEAR installer

Page 33: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Build automation with pantr

1. pantr pear:init lib

Page 34: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Build automation with pantr

2. pantr pear:channel-discover pear.pagosoft.com

Page 35: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Build automation with pantr

3. pantr pear:install pgs/parser

Page 36: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Packaging

Page 37: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

*nix packages – 4 steps to enlightenment

Page 38: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

*nix packages – 4 steps to enlightenment

1. Create directory yourproject-0.0.1

Page 39: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

*nix packages – 4 steps to enlightenment

2. dh_make –createorig -s

Page 40: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

*nix packages – 4 steps to enlightenment

3. Add a Makefile

Page 41: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

*nix packages – 4 steps to enlightenment

BINDIR = $(DESTDIR)/usr/binclean:install:mkdir -p $(BINDIR)cp info.php $(BINDIR)

uninstall:rm -f $(BINDIR)/info.php

Page 42: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

*nix packages – 4 steps to enlightenment

4. fakeroot debian/rules binary

Page 43: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

*nix packages – Dependencies?

Page 44: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

*nix packages – Dependencies?

Add them to debian/control file

Page 45: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

*nix packages – Dependencies?

Source: yourprojectSection: unknownPriority: extraMaintainer: Stephan HochdoerferBuild-Depends: debhelper (>= 7.0.50~)Standards-Version: 3.8.4

Package: yourprojectArchitecture: anyDepends: php5-cgi php5-mysqlDescription: yourproject short description long description...

Page 46: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

PEAR package – 3 steps to enlightenment

Page 47: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

PEAR package – 3 steps to enlightenment

1. Create directory yourproject-0.0.1

Page 48: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

PEAR package – 3 steps to enlightenment

2. Create package.xml

Page 49: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

PEAR package – 3 steps to enlightenment<?xml version="1.0" encoding="UTF-8"?><package packagerversion="1.8.0" version="2.0"> <name>Yourapp</name> <channel>pear.yourapp.com</channel> <summary>Yourapp summary</summary> <description>Yourapp description.</description> <lead> <name>Stephan Hochdoerfer</name> <user>sh</user> <email>[email protected]</email> <active>yes</active> </lead> <date>2009-10-18</date> <time>16:00:00</time> <version> <release>0.9.0</release>

Page 50: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

PEAR package – 3 steps to enlightenment <dependencies> <required> <php> <min>5.0.0</min> </php> <pearinstaller> <min>1.4.0</min> </pearinstaller> </required> </dependencies> <phprelease /></package>

Page 51: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

PEAR package – 3 steps to enlightenment

3. pear package

Page 52: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

How to deliver the packages?

Page 53: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

How to deliver the packages?

*nix repository vs. PEAR server

Page 54: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

How to deliver the packages?

pearhub, pearfarm, openPear

Page 55: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

How to deliver the packages?

PEAR Proxy needed?

Page 56: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Missing the glue!

Page 57: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Java anyone?

Page 58: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven – a project management tool

Page 59: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven

Goal: Standardization

Page 60: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven Lifecycle

archetype

Page 61: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven Lifecycle

archetype

validate

Page 62: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven Lifecycle

archetype

validate

compile

Page 63: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven Lifecycle

archetype

validate

compile

test

Page 64: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven Lifecycle

archetype

validate

compile

test

package

Page 65: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven Lifecycle

archetype

validate

compile

test

packageintegration-test

Page 66: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven Lifecycle

archetype

validate

compile

test

packageintegration-test

verify

Page 67: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven Lifecycle

archetype

validate

compile

test

packageintegration-test

verify

install

Page 68: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven Lifecycle

archetype

validate

compile

test

packageintegration-test

verify

install

deploy

Page 69: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven - Project Object Model

<project xmlns="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">

<groupId>com.acme</groupId><artifactId>myproject</artifactId><packaging>jar</packaging><version>0.0.1-SNAPSHOT</version><name>My project</name>

</project>

Page 70: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven - Dependencies

<dependencies><dependency>

<groupId>com.zend</groupId><artifactId>framework</artifactId><version>1.11.6-SNAPSHOT</version><type>jar</type><scope>compile</scope>

</dependency></dependencies>

Page 71: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven Beginners guide

Maven for PHP?

Page 72: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven Beginners guide

1. Download & install Maven

Page 73: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven Beginners guide

2. Edit settings.xml to add PHP for Maven repository

Page 74: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven Beginners guide

<pluginRepository><id>release-repo1.php-maven.org</id><name>PHP-Maven 2 Release Repository</name><url>http://repo1.php-maven.org/release</url><releases>

<enabled>true</enabled></releases>

</pluginRepository>

Page 75: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven Beginners guide

3. Create new Maven project

Page 76: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven Beginners guide

mvn archetype:generate \-DarchetypeGroupId=org.phpmaven \-DarchetypeArtifactId=php5-lib-archetype \-DarchetypeVersion=1.1 \-DgroupId=org.yourproject \-DartifactId=appname

Page 77: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven Beginners guide

2. Deploy your project

Page 78: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven Beginners guide

mvn deploy

Page 79: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven Bonus points

Can act as a proxy!

Page 80: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven Bonus points

Plugins, Plugins, Plugins,...

Page 81: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven Bonus points

Automatic release management

Page 82: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven Bonus points

Automatic deployment

Page 83: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven Bonus points

Build profiles

Page 84: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Maven Bonus points

IDE support, e.g. Eclipse, Netbeans,...

Page 85: Simplify your external dependency management - DPC11

http://joind.in/3232

Page 86: Simplify your external dependency management - DPC11

Simplify your ext. dependency management

Image Credits

http://www.sxc.hu/photo/1092493

http://www.sxc.hu/photo/910278

http://www.sxc.hu/photo/766748