SlideShare a Scribd company logo
1 of 86
Download to read offline
v




 Simplify your external
dependency management
Simplify your ext. dependency management

 About me

  Stephan Hochdörfer, bitExpert AG
  Department Manager Research Labs
  enjoying PHP since 1999
  S.Hochdoerfer@bitExpert.de
  @shochdoerfer
Simplify your ext. dependency management

 Dependencies?
Simplify your ext. dependency management

 Dependencies?




 internal                                   external
 Dependencies                          Dependencies
Simplify your ext. dependency management

 Dependencies?
                                            external
                                       Dependencies

                                            Extensions
                                           Systemtools
                                           Frameworks
                                                  Libs
Simplify your ext. dependency management




 Our first project....
Simplify your ext. dependency management

 Our first project....




                             +
Simplify your ext. dependency management

 Our first project – the structure

 yourpoject
    |-application
    |-library
    |---Facebook
    |---Zend
    |-public
    |---js
    |---css
    |-tests
Simplify your ext. dependency management




 Maintenance nightmare!
Simplify your ext. dependency management



 Version control, anyone?
Simplify your ext. dependency management



 Subversion – svn:externals
Simplify your ext. dependency management




 Git - Submodules
Simplify your ext. dependency management


 Git - Subtree
Simplify your ext. dependency management

 Recap




          No overview of dependency
                 configuration
Simplify your ext. dependency management

 Recap




    Externals must be of the same type
             as the repository!
Simplify your ext. dependency management

 Recap




     Commiting to Externals is possible!
Simplify your ext. dependency management

 Insight




              You cannot control
           dependencies with a VCS!
Simplify your ext. dependency management

 Insight




             A VCS is not made for
           dependency management!
Simplify your ext. dependency management



 Requirements first!
Simplify your ext. dependency management



 Do not hide dependency metadata!
Simplify your ext. dependency management



 Transitive dependencies
Simplify your ext. dependency management




 Do not reinvent the wheel




                               v
Simplify your ext. dependency management




 Separation from VCS
Simplify your ext. dependency management




 Mind change: Build process needed!
Simplify your ext. dependency management




 Step 1: Building the build
Simplify your ext. dependency management




 Step 2: Package the software
Simplify your ext. dependency management




 Step 3: Deliver the software
Simplify your ext. dependency management

 Build automation
Simplify your ext. dependency management

 Build automation
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>
Simplify your ext. dependency management

 Build automation with pear
Simplify your ext. dependency management

 Build automation with pear pantr




    pantr = project-based PEAR installer
Simplify your ext. dependency management

 Build automation with pantr




                1. pantr pear:init lib
Simplify your ext. dependency management

 Build automation with pantr




        2. pantr pear:channel-discover
              pear.pagosoft.com
Simplify your ext. dependency management

 Build automation with pantr




        3. pantr pear:install pgs/parser
Simplify your ext. dependency management

 Packaging
Simplify your ext. dependency management



 *nix packages – 4 steps to enlightenment
Simplify your ext. dependency management

 *nix packages – 4 steps to enlightenment




    1. Create directory yourproject-0.0.1
Simplify your ext. dependency management

 *nix packages – 4 steps to enlightenment




            2. dh_make –createorig -s
Simplify your ext. dependency management

 *nix packages – 4 steps to enlightenment




                  3. Add a Makefile
Simplify your ext. dependency management

 *nix packages – 4 steps to enlightenment

      BINDIR = $(DESTDIR)/usr/bin
      clean:
      install:
        mkdir -p $(BINDIR)
        cp info.php $(BINDIR)
      uninstall:
        rm -f $(BINDIR)/info.php
Simplify your ext. dependency management

 *nix packages – 4 steps to enlightenment




        4. fakeroot debian/rules binary
Simplify your ext. dependency management

 *nix packages – Dependencies?
Simplify your ext. dependency management

 *nix packages – Dependencies?




        Add them to debian/control file
Simplify your ext. dependency management

 *nix packages – Dependencies?
 Source: yourproject
 Section: unknown
 Priority: extra
 Maintainer: Stephan Hochdoerfer
 Build-Depends: debhelper (>= 7.0.50~)
 Standards-Version: 3.8.4

 Package: yourproject
 Architecture: any
 Depends: php5-cgi php5-mysql
 Description: yourproject short description
  long description...
Simplify your ext. dependency management




 PEAR package – 3 steps to enlightenment
Simplify your ext. dependency management

 PEAR package – 3 steps to enlightenment




    1. Create directory yourproject-0.0.1
Simplify your ext. dependency management

 PEAR package – 3 steps to enlightenment




              2. Create package.xml
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>S.Hochdoerfer@bitExpert.de</email>
   <active>yes</active>
  </lead>
  <date>2009-10-18</date>
  <time>16:00:00</time>
  <version>
   <release>0.9.0</release>
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>
Simplify your ext. dependency management

 PEAR package – 3 steps to enlightenment




                   3. pear package
Simplify your ext. dependency management

 How to deliver the packages?
Simplify your ext. dependency management

 How to deliver the packages?




        *nix repository vs. PEAR server
Simplify your ext. dependency management

 How to deliver the packages?




         pearhub, pearfarm, openPear
Simplify your ext. dependency management

 How to deliver the packages?




               PEAR Proxy needed?
Simplify your ext. dependency management




 Missing the glue!
Simplify your ext. dependency management




 Java anyone?
Simplify your ext. dependency management




 Maven – a project management tool
Simplify your ext. dependency management

 Maven




               Goal: Standardization
Simplify your ext. dependency management

 Maven Lifecycle
                       archetype
Simplify your ext. dependency management

 Maven Lifecycle
                       archetype

                                     validate
Simplify your ext. dependency management

 Maven Lifecycle
                       archetype

                                     validate


                                           compile
Simplify your ext. dependency management

 Maven Lifecycle
                       archetype

                                     validate


                                              compile


                                           test
Simplify your ext. dependency management

 Maven Lifecycle
                       archetype

                                       validate


                                              compile


                                           test


                                   package
Simplify your ext. dependency management

 Maven Lifecycle
                       archetype

                                       validate


                                              compile


                                           test


               integration-test    package
Simplify your ext. dependency management

 Maven Lifecycle
                       archetype

                                       validate


                                              compile


          verify                           test


               integration-test    package
Simplify your ext. dependency management

 Maven Lifecycle
                         archetype

                                         validate


       install                                 compile


           verify                           test


                 integration-test    package
Simplify your ext. dependency management

 Maven Lifecycle
                           archetype

                 deploy                    validate


       install                                   compile


           verify                             test


                   integration-test    package
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.0
 http://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>
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>
Simplify your ext. dependency management

 Maven Beginners guide




                   Maven for PHP?
Simplify your ext. dependency management

 Maven Beginners guide




          1. Download & install Maven
Simplify your ext. dependency management

 Maven Beginners guide




           2. Edit settings.xml to add
            PHP for Maven repository
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>
Simplify your ext. dependency management

 Maven Beginners guide




         3. Create new Maven project
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
Simplify your ext. dependency management

 Maven Beginners guide




              2. Deploy your project
Simplify your ext. dependency management

 Maven Beginners guide




                    mvn deploy
Simplify your ext. dependency management

 Maven Bonus points




                Can act as a proxy!
Simplify your ext. dependency management

 Maven Bonus points




           Plugins, Plugins, Plugins,...
Simplify your ext. dependency management

 Maven Bonus points




       Automatic release management
Simplify your ext. dependency management

 Maven Bonus points




              Automatic deployment
Simplify your ext. dependency management

 Maven Bonus points




                     Build profiles
Simplify your ext. dependency management

 Maven Bonus points




            IDE support, e.g. Eclipse,
                  Netbeans,...
http://joind.in/3232
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

More Related Content

What's hot

Tuscany : Applying OSGi After The Fact
Tuscany : Applying  OSGi After The FactTuscany : Applying  OSGi After The Fact
Tuscany : Applying OSGi After The FactLuciano Resende
 
Best practices for share point solution deployment
Best practices for share point solution deploymentBest practices for share point solution deployment
Best practices for share point solution deploymentSalaudeen Rajack
 
Release With Maven
Release With MavenRelease With Maven
Release With Maveneugenn
 
Maven, Eclipse and OSGi Working Together - Carlos Sanchez
Maven, Eclipse and OSGi Working Together - Carlos SanchezMaven, Eclipse and OSGi Working Together - Carlos Sanchez
Maven, Eclipse and OSGi Working Together - Carlos Sanchezmfrancis
 
How to Use NDS eDirectory to Secure Apache Web Server for NetWare
How to Use NDS eDirectory to Secure Apache Web Server for NetWareHow to Use NDS eDirectory to Secure Apache Web Server for NetWare
How to Use NDS eDirectory to Secure Apache Web Server for NetWarewebhostingguy
 
Don't touch that server
Don't touch that serverDon't touch that server
Don't touch that servercrdant
 
Juggling Java EE with Enterprise Apache Maven
Juggling Java EE with Enterprise Apache MavenJuggling Java EE with Enterprise Apache Maven
Juggling Java EE with Enterprise Apache Mavenelliando dias
 
It camp veeam presentation (no videos)
It camp veeam presentation (no videos)It camp veeam presentation (no videos)
It camp veeam presentation (no videos)Harold Wong
 
02.egovFrame Development Environment workshop I
02.egovFrame  Development Environment workshop I02.egovFrame  Development Environment workshop I
02.egovFrame Development Environment workshop IChuong Nguyen
 

What's hot (10)

Tuscany : Applying OSGi After The Fact
Tuscany : Applying  OSGi After The FactTuscany : Applying  OSGi After The Fact
Tuscany : Applying OSGi After The Fact
 
Best practices for share point solution deployment
Best practices for share point solution deploymentBest practices for share point solution deployment
Best practices for share point solution deployment
 
Release With Maven
Release With MavenRelease With Maven
Release With Maven
 
Maven, Eclipse and OSGi Working Together - Carlos Sanchez
Maven, Eclipse and OSGi Working Together - Carlos SanchezMaven, Eclipse and OSGi Working Together - Carlos Sanchez
Maven, Eclipse and OSGi Working Together - Carlos Sanchez
 
How to Use NDS eDirectory to Secure Apache Web Server for NetWare
How to Use NDS eDirectory to Secure Apache Web Server for NetWareHow to Use NDS eDirectory to Secure Apache Web Server for NetWare
How to Use NDS eDirectory to Secure Apache Web Server for NetWare
 
Liferay maven sdk
Liferay maven sdkLiferay maven sdk
Liferay maven sdk
 
Don't touch that server
Don't touch that serverDon't touch that server
Don't touch that server
 
Juggling Java EE with Enterprise Apache Maven
Juggling Java EE with Enterprise Apache MavenJuggling Java EE with Enterprise Apache Maven
Juggling Java EE with Enterprise Apache Maven
 
It camp veeam presentation (no videos)
It camp veeam presentation (no videos)It camp veeam presentation (no videos)
It camp veeam presentation (no videos)
 
02.egovFrame Development Environment workshop I
02.egovFrame  Development Environment workshop I02.egovFrame  Development Environment workshop I
02.egovFrame Development Environment workshop I
 

Similar to Simplify your external dependency management - DPC11

Learning Maven by Example
Learning Maven by ExampleLearning Maven by Example
Learning Maven by ExampleHsi-Kai Wang
 
Maven 2 features
Maven 2 featuresMaven 2 features
Maven 2 featuresAngel Ruiz
 
An Introduction to Maven
An Introduction to MavenAn Introduction to Maven
An Introduction to MavenVadym Lotar
 
Apache maven, a software project management tool
Apache maven, a software project management toolApache maven, a software project management tool
Apache maven, a software project management toolRenato Primavera
 
Introduction to Maven for beginners and DevOps
Introduction to Maven for beginners and DevOpsIntroduction to Maven for beginners and DevOps
Introduction to Maven for beginners and DevOpsSISTechnologies
 
Jdc 2010 - Maven, Intelligent Projects
Jdc 2010 - Maven, Intelligent ProjectsJdc 2010 - Maven, Intelligent Projects
Jdc 2010 - Maven, Intelligent ProjectsMert Çalışkan
 
Linuxtag 2012 - continuous delivery - dream to reality
Linuxtag 2012  - continuous delivery - dream to realityLinuxtag 2012  - continuous delivery - dream to reality
Linuxtag 2012 - continuous delivery - dream to realityClément Escoffier
 
Continuous Integration and Deployment Best Practices on AWS
Continuous Integration and Deployment Best Practices on AWSContinuous Integration and Deployment Best Practices on AWS
Continuous Integration and Deployment Best Practices on AWSAmazon Web Services
 
Java, Eclipse, Maven & JSF tutorial
Java, Eclipse, Maven & JSF tutorialJava, Eclipse, Maven & JSF tutorial
Java, Eclipse, Maven & JSF tutorialRaghavan Mohan
 
Docker presentasjon java bin
Docker presentasjon java binDocker presentasjon java bin
Docker presentasjon java binOlve Hansen
 
Maven – The build paraphernalia
Maven – The build paraphernaliaMaven – The build paraphernalia
Maven – The build paraphernaliaSubin Sugunan
 
maven
mavenmaven
mavenakd11
 
Jenkins advance topic
Jenkins advance topicJenkins advance topic
Jenkins advance topicGourav Varma
 

Similar to Simplify your external dependency management - DPC11 (20)

Learning Maven by Example
Learning Maven by ExampleLearning Maven by Example
Learning Maven by Example
 
Maven 2 features
Maven 2 featuresMaven 2 features
Maven 2 features
 
An Introduction to Maven
An Introduction to MavenAn Introduction to Maven
An Introduction to Maven
 
SWT Lab 1
SWT Lab 1SWT Lab 1
SWT Lab 1
 
P&MSP2012 - Maven
P&MSP2012 - MavenP&MSP2012 - Maven
P&MSP2012 - Maven
 
Maven 3 New Features
Maven 3 New FeaturesMaven 3 New Features
Maven 3 New Features
 
Apache maven, a software project management tool
Apache maven, a software project management toolApache maven, a software project management tool
Apache maven, a software project management tool
 
Maven
MavenMaven
Maven
 
Maven.pptx
Maven.pptxMaven.pptx
Maven.pptx
 
Introduction to Maven for beginners and DevOps
Introduction to Maven for beginners and DevOpsIntroduction to Maven for beginners and DevOps
Introduction to Maven for beginners and DevOps
 
Jdc 2010 - Maven, Intelligent Projects
Jdc 2010 - Maven, Intelligent ProjectsJdc 2010 - Maven, Intelligent Projects
Jdc 2010 - Maven, Intelligent Projects
 
Linuxtag 2012 - continuous delivery - dream to reality
Linuxtag 2012  - continuous delivery - dream to realityLinuxtag 2012  - continuous delivery - dream to reality
Linuxtag 2012 - continuous delivery - dream to reality
 
Continuous Integration and Deployment Best Practices on AWS
Continuous Integration and Deployment Best Practices on AWSContinuous Integration and Deployment Best Practices on AWS
Continuous Integration and Deployment Best Practices on AWS
 
Java, Eclipse, Maven & JSF tutorial
Java, Eclipse, Maven & JSF tutorialJava, Eclipse, Maven & JSF tutorial
Java, Eclipse, Maven & JSF tutorial
 
Maven
MavenMaven
Maven
 
Docker presentasjon java bin
Docker presentasjon java binDocker presentasjon java bin
Docker presentasjon java bin
 
Maven – The build paraphernalia
Maven – The build paraphernaliaMaven – The build paraphernalia
Maven – The build paraphernalia
 
maven
mavenmaven
maven
 
Continuous Deployment
Continuous DeploymentContinuous Deployment
Continuous Deployment
 
Jenkins advance topic
Jenkins advance topicJenkins advance topic
Jenkins advance topic
 

More from Stephan Hochdörfer

Offline. Na und? Strategien für offlinefähige Applikationen in HTML5 - Herbst...
Offline. Na und? Strategien für offlinefähige Applikationen in HTML5 - Herbst...Offline. Na und? Strategien für offlinefähige Applikationen in HTML5 - Herbst...
Offline. Na und? Strategien für offlinefähige Applikationen in HTML5 - Herbst...Stephan Hochdörfer
 
Phing for power users - frOSCon8
Phing for power users - frOSCon8Phing for power users - frOSCon8
Phing for power users - frOSCon8Stephan Hochdörfer
 
Offline strategies for HTML5 web applications - frOSCon8
Offline strategies for HTML5 web applications - frOSCon8Offline strategies for HTML5 web applications - frOSCon8
Offline strategies for HTML5 web applications - frOSCon8Stephan Hochdörfer
 
Offline Strategies for HTML5 Web Applications - oscon13
Offline Strategies for HTML5 Web Applications - oscon13Offline Strategies for HTML5 Web Applications - oscon13
Offline Strategies for HTML5 Web Applications - oscon13Stephan Hochdörfer
 
Real World Dependency Injection - oscon13
Real World Dependency Injection - oscon13Real World Dependency Injection - oscon13
Real World Dependency Injection - oscon13Stephan Hochdörfer
 
Dependency Injection in PHP - dwx13
Dependency Injection in PHP - dwx13Dependency Injection in PHP - dwx13
Dependency Injection in PHP - dwx13Stephan Hochdörfer
 
Offline Strategien für HTML5 Web Applikationen - dwx13
Offline Strategien für HTML5 Web Applikationen - dwx13 Offline Strategien für HTML5 Web Applikationen - dwx13
Offline Strategien für HTML5 Web Applikationen - dwx13 Stephan Hochdörfer
 
Your Business. Your Language. Your Code - dpc13
Your Business. Your Language. Your Code - dpc13Your Business. Your Language. Your Code - dpc13
Your Business. Your Language. Your Code - dpc13Stephan Hochdörfer
 
Phing for power users - dpc_uncon13
Phing for power users - dpc_uncon13Phing for power users - dpc_uncon13
Phing for power users - dpc_uncon13Stephan Hochdörfer
 
Offline Strategies for HTML5 Web Applications - ipc13
Offline Strategies for HTML5 Web Applications - ipc13Offline Strategies for HTML5 Web Applications - ipc13
Offline Strategies for HTML5 Web Applications - ipc13Stephan Hochdörfer
 
Offline-Strategien für HTML5 Web Applikationen - wmka
Offline-Strategien für HTML5 Web Applikationen - wmkaOffline-Strategien für HTML5 Web Applikationen - wmka
Offline-Strategien für HTML5 Web Applikationen - wmkaStephan Hochdörfer
 
Offline-Strategien für HTML5 Web Applikationen - bedcon13
Offline-Strategien für HTML5 Web Applikationen - bedcon13Offline-Strategien für HTML5 Web Applikationen - bedcon13
Offline-Strategien für HTML5 Web Applikationen - bedcon13Stephan Hochdörfer
 
Real World Dependency Injection - phpugffm13
Real World Dependency Injection - phpugffm13Real World Dependency Injection - phpugffm13
Real World Dependency Injection - phpugffm13Stephan Hochdörfer
 
Testing untestable code - ConFoo13
Testing untestable code - ConFoo13Testing untestable code - ConFoo13
Testing untestable code - ConFoo13Stephan Hochdörfer
 
Offline strategies for HTML5 web applications - ConFoo13
Offline strategies for HTML5 web applications - ConFoo13Offline strategies for HTML5 web applications - ConFoo13
Offline strategies for HTML5 web applications - ConFoo13Stephan Hochdörfer
 
Offline-Strategien für HTML5Web Applikationen - WMMRN12
Offline-Strategien für HTML5Web Applikationen - WMMRN12Offline-Strategien für HTML5Web Applikationen - WMMRN12
Offline-Strategien für HTML5Web Applikationen - WMMRN12Stephan Hochdörfer
 
Offline strategies for HTML5 web applications - IPC12
Offline strategies for HTML5 web applications - IPC12Offline strategies for HTML5 web applications - IPC12
Offline strategies for HTML5 web applications - IPC12Stephan Hochdörfer
 
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12Stephan Hochdörfer
 

More from Stephan Hochdörfer (20)

Offline. Na und? Strategien für offlinefähige Applikationen in HTML5 - Herbst...
Offline. Na und? Strategien für offlinefähige Applikationen in HTML5 - Herbst...Offline. Na und? Strategien für offlinefähige Applikationen in HTML5 - Herbst...
Offline. Na und? Strategien für offlinefähige Applikationen in HTML5 - Herbst...
 
Phing for power users - frOSCon8
Phing for power users - frOSCon8Phing for power users - frOSCon8
Phing for power users - frOSCon8
 
Offline strategies for HTML5 web applications - frOSCon8
Offline strategies for HTML5 web applications - frOSCon8Offline strategies for HTML5 web applications - frOSCon8
Offline strategies for HTML5 web applications - frOSCon8
 
Offline Strategies for HTML5 Web Applications - oscon13
Offline Strategies for HTML5 Web Applications - oscon13Offline Strategies for HTML5 Web Applications - oscon13
Offline Strategies for HTML5 Web Applications - oscon13
 
Real World Dependency Injection - oscon13
Real World Dependency Injection - oscon13Real World Dependency Injection - oscon13
Real World Dependency Injection - oscon13
 
Dependency Injection in PHP - dwx13
Dependency Injection in PHP - dwx13Dependency Injection in PHP - dwx13
Dependency Injection in PHP - dwx13
 
Offline Strategien für HTML5 Web Applikationen - dwx13
Offline Strategien für HTML5 Web Applikationen - dwx13 Offline Strategien für HTML5 Web Applikationen - dwx13
Offline Strategien für HTML5 Web Applikationen - dwx13
 
Your Business. Your Language. Your Code - dpc13
Your Business. Your Language. Your Code - dpc13Your Business. Your Language. Your Code - dpc13
Your Business. Your Language. Your Code - dpc13
 
Phing for power users - dpc_uncon13
Phing for power users - dpc_uncon13Phing for power users - dpc_uncon13
Phing for power users - dpc_uncon13
 
Offline Strategies for HTML5 Web Applications - ipc13
Offline Strategies for HTML5 Web Applications - ipc13Offline Strategies for HTML5 Web Applications - ipc13
Offline Strategies for HTML5 Web Applications - ipc13
 
Offline-Strategien für HTML5 Web Applikationen - wmka
Offline-Strategien für HTML5 Web Applikationen - wmkaOffline-Strategien für HTML5 Web Applikationen - wmka
Offline-Strategien für HTML5 Web Applikationen - wmka
 
Offline-Strategien für HTML5 Web Applikationen - bedcon13
Offline-Strategien für HTML5 Web Applikationen - bedcon13Offline-Strategien für HTML5 Web Applikationen - bedcon13
Offline-Strategien für HTML5 Web Applikationen - bedcon13
 
Real World Dependency Injection - phpugffm13
Real World Dependency Injection - phpugffm13Real World Dependency Injection - phpugffm13
Real World Dependency Injection - phpugffm13
 
Testing untestable code - ConFoo13
Testing untestable code - ConFoo13Testing untestable code - ConFoo13
Testing untestable code - ConFoo13
 
A Phing fairy tale - ConFoo13
A Phing fairy tale - ConFoo13A Phing fairy tale - ConFoo13
A Phing fairy tale - ConFoo13
 
Offline strategies for HTML5 web applications - ConFoo13
Offline strategies for HTML5 web applications - ConFoo13Offline strategies for HTML5 web applications - ConFoo13
Offline strategies for HTML5 web applications - ConFoo13
 
Offline-Strategien für HTML5Web Applikationen - WMMRN12
Offline-Strategien für HTML5Web Applikationen - WMMRN12Offline-Strategien für HTML5Web Applikationen - WMMRN12
Offline-Strategien für HTML5Web Applikationen - WMMRN12
 
Testing untestable code - IPC12
Testing untestable code - IPC12Testing untestable code - IPC12
Testing untestable code - IPC12
 
Offline strategies for HTML5 web applications - IPC12
Offline strategies for HTML5 web applications - IPC12Offline strategies for HTML5 web applications - IPC12
Offline strategies for HTML5 web applications - IPC12
 
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12
 

Simplify your external dependency management - DPC11

  • 1. v Simplify your external dependency management
  • 2. Simplify your ext. dependency management About me  Stephan Hochdörfer, bitExpert AG  Department Manager Research Labs  enjoying PHP since 1999  S.Hochdoerfer@bitExpert.de  @shochdoerfer
  • 3. Simplify your ext. dependency management Dependencies?
  • 4. Simplify your ext. dependency management Dependencies? internal external Dependencies Dependencies
  • 5. Simplify your ext. dependency management Dependencies? external Dependencies Extensions Systemtools Frameworks Libs
  • 6. Simplify your ext. dependency management Our first project....
  • 7. Simplify your ext. dependency management Our first project.... +
  • 8. Simplify your ext. dependency management Our first project – the structure yourpoject |-application |-library |---Facebook |---Zend |-public |---js |---css |-tests
  • 9. Simplify your ext. dependency management Maintenance nightmare!
  • 10. Simplify your ext. dependency management Version control, anyone?
  • 11. Simplify your ext. dependency management Subversion – svn:externals
  • 12. Simplify your ext. dependency management Git - Submodules
  • 13. Simplify your ext. dependency management Git - Subtree
  • 14. Simplify your ext. dependency management Recap No overview of dependency configuration
  • 15. Simplify your ext. dependency management Recap Externals must be of the same type as the repository!
  • 16. Simplify your ext. dependency management Recap Commiting to Externals is possible!
  • 17. Simplify your ext. dependency management Insight You cannot control dependencies with a VCS!
  • 18. Simplify your ext. dependency management Insight A VCS is not made for dependency management!
  • 19. Simplify your ext. dependency management Requirements first!
  • 20. Simplify your ext. dependency management Do not hide dependency metadata!
  • 21. Simplify your ext. dependency management Transitive dependencies
  • 22. Simplify your ext. dependency management Do not reinvent the wheel v
  • 23. Simplify your ext. dependency management Separation from VCS
  • 24. Simplify your ext. dependency management Mind change: Build process needed!
  • 25. Simplify your ext. dependency management Step 1: Building the build
  • 26. Simplify your ext. dependency management Step 2: Package the software
  • 27. Simplify your ext. dependency management Step 3: Deliver the software
  • 28. Simplify your ext. dependency management Build automation
  • 29. Simplify your ext. dependency management Build automation
  • 30. 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>
  • 31. Simplify your ext. dependency management Build automation with pear
  • 32. Simplify your ext. dependency management Build automation with pear pantr pantr = project-based PEAR installer
  • 33. Simplify your ext. dependency management Build automation with pantr 1. pantr pear:init lib
  • 34. Simplify your ext. dependency management Build automation with pantr 2. pantr pear:channel-discover pear.pagosoft.com
  • 35. Simplify your ext. dependency management Build automation with pantr 3. pantr pear:install pgs/parser
  • 36. Simplify your ext. dependency management Packaging
  • 37. Simplify your ext. dependency management *nix packages – 4 steps to enlightenment
  • 38. Simplify your ext. dependency management *nix packages – 4 steps to enlightenment 1. Create directory yourproject-0.0.1
  • 39. Simplify your ext. dependency management *nix packages – 4 steps to enlightenment 2. dh_make –createorig -s
  • 40. Simplify your ext. dependency management *nix packages – 4 steps to enlightenment 3. Add a Makefile
  • 41. Simplify your ext. dependency management *nix packages – 4 steps to enlightenment BINDIR = $(DESTDIR)/usr/bin clean: install: mkdir -p $(BINDIR) cp info.php $(BINDIR) uninstall: rm -f $(BINDIR)/info.php
  • 42. Simplify your ext. dependency management *nix packages – 4 steps to enlightenment 4. fakeroot debian/rules binary
  • 43. Simplify your ext. dependency management *nix packages – Dependencies?
  • 44. Simplify your ext. dependency management *nix packages – Dependencies? Add them to debian/control file
  • 45. Simplify your ext. dependency management *nix packages – Dependencies? Source: yourproject Section: unknown Priority: extra Maintainer: Stephan Hochdoerfer Build-Depends: debhelper (>= 7.0.50~) Standards-Version: 3.8.4 Package: yourproject Architecture: any Depends: php5-cgi php5-mysql Description: yourproject short description long description...
  • 46. Simplify your ext. dependency management PEAR package – 3 steps to enlightenment
  • 47. Simplify your ext. dependency management PEAR package – 3 steps to enlightenment 1. Create directory yourproject-0.0.1
  • 48. Simplify your ext. dependency management PEAR package – 3 steps to enlightenment 2. Create package.xml
  • 49. 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>S.Hochdoerfer@bitExpert.de</email> <active>yes</active> </lead> <date>2009-10-18</date> <time>16:00:00</time> <version> <release>0.9.0</release>
  • 50. 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>
  • 51. Simplify your ext. dependency management PEAR package – 3 steps to enlightenment 3. pear package
  • 52. Simplify your ext. dependency management How to deliver the packages?
  • 53. Simplify your ext. dependency management How to deliver the packages? *nix repository vs. PEAR server
  • 54. Simplify your ext. dependency management How to deliver the packages? pearhub, pearfarm, openPear
  • 55. Simplify your ext. dependency management How to deliver the packages? PEAR Proxy needed?
  • 56. Simplify your ext. dependency management Missing the glue!
  • 57. Simplify your ext. dependency management Java anyone?
  • 58. Simplify your ext. dependency management Maven – a project management tool
  • 59. Simplify your ext. dependency management Maven Goal: Standardization
  • 60. Simplify your ext. dependency management Maven Lifecycle archetype
  • 61. Simplify your ext. dependency management Maven Lifecycle archetype validate
  • 62. Simplify your ext. dependency management Maven Lifecycle archetype validate compile
  • 63. Simplify your ext. dependency management Maven Lifecycle archetype validate compile test
  • 64. Simplify your ext. dependency management Maven Lifecycle archetype validate compile test package
  • 65. Simplify your ext. dependency management Maven Lifecycle archetype validate compile test integration-test package
  • 66. Simplify your ext. dependency management Maven Lifecycle archetype validate compile verify test integration-test package
  • 67. Simplify your ext. dependency management Maven Lifecycle archetype validate install compile verify test integration-test package
  • 68. Simplify your ext. dependency management Maven Lifecycle archetype deploy validate install compile verify test integration-test package
  • 69. 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.0 http://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>
  • 70. 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>
  • 71. Simplify your ext. dependency management Maven Beginners guide Maven for PHP?
  • 72. Simplify your ext. dependency management Maven Beginners guide 1. Download & install Maven
  • 73. Simplify your ext. dependency management Maven Beginners guide 2. Edit settings.xml to add PHP for Maven repository
  • 74. 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>
  • 75. Simplify your ext. dependency management Maven Beginners guide 3. Create new Maven project
  • 76. 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
  • 77. Simplify your ext. dependency management Maven Beginners guide 2. Deploy your project
  • 78. Simplify your ext. dependency management Maven Beginners guide mvn deploy
  • 79. Simplify your ext. dependency management Maven Bonus points Can act as a proxy!
  • 80. Simplify your ext. dependency management Maven Bonus points Plugins, Plugins, Plugins,...
  • 81. Simplify your ext. dependency management Maven Bonus points Automatic release management
  • 82. Simplify your ext. dependency management Maven Bonus points Automatic deployment
  • 83. Simplify your ext. dependency management Maven Bonus points Build profiles
  • 84. Simplify your ext. dependency management Maven Bonus points IDE support, e.g. Eclipse, Netbeans,...
  • 86. 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