jeg har så vondt i mvn

48
Jeg har så vondt i mvn JavaBin, 10. mars, 2011 Johannes Brodwall

Upload: lindsay

Post on 24-Feb-2016

83 views

Category:

Documents


0 download

DESCRIPTION

Jeg har så vondt i mvn. JavaBin , 10. mars, 2011 Johannes Brodwall. mvn intro. mvn intro archetype:generate test – package – install – deploy eclipse:eclipse / idea:idea. $ mvn archetype:generate [INFO] Scanning for projects ... - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Jeg har så vondt i  mvn

Jeg har så vondt i mvn

JavaBin, 10. mars, 2011Johannes Brodwall

Page 2: Jeg har så vondt i  mvn

mvn intro

Page 3: Jeg har så vondt i  mvn

mvn introarchetype:generate

test – package – install – deployeclipse:eclipse/idea:idea

Page 4: Jeg har så vondt i  mvn

$ mvn archetype:generate[INFO] Scanning for projects...[INFO] Searching repository for plugin with prefix: 'archetype'.[INFO] ------------------------------------------------------------------------[INFO] Building Maven Default Project[INFO] task-segment: [archetype:generate] (aggregator-style)[INFO] ------------------------------------------------------------------------[INFO] Preparing archetype:generate[INFO] No goals needed for project - skipping[hoose archetype: ….

Page 5: Jeg har så vondt i  mvn

[hoose archetype:1: remote -> docbkx-quickstart-archetype (-)2: remote -> multi (-)3: remote -> simple (-)...101: remote -> maven-archetype-quickstart (An archetype which contains a sample Maven project.)...375: remote -> javg-minimal-archetype (-)Choose a number: 101: 101Choose version:... 6: 1.1Choose a number: 6:

Page 6: Jeg har så vondt i  mvn

Define value for property 'groupId': : no.steria.demoDefine value for property 'artifactId': : maven-demoDefine value for property 'version': 1.0-SNAPSHOT:Define value for property 'package': no.steria.demo:Confirm properties configuration:groupId: no.steria.demoartifactId: maven-demoversion: 1.0-SNAPSHOTpackage: no.steria.demoY:

Page 7: Jeg har så vondt i  mvn

[INFO] project created from Old (1.x) Archetype in dir: C:\Users\johannes\workspace\tmp\maven-demo[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESSFUL[INFO] ------------------------------------------------------------------------[INFO] Total time: 20 seconds[INFO] Finished at: Thu Mar 10 08:42:16 CET 2011[INFO] Final Memory: 19M/154M[INFO] ------------------------------------------------------------------------

Page 8: Jeg har så vondt i  mvn

/** * Unit test for simple App. */public class AppTest extends TestCase{ /** * Create the test case * * @param testName name of the test case */ public AppTest( String testName ) { super( testName ); }

/** * @return the suite of tests being tested */ public static Test suite() { return new TestSuite( AppTest.class ); }

/** * Rigourous Test :-) */ public void testApp() { assertTrue( true ); }}

Page 9: Jeg har så vondt i  mvn

mvn introarchetype:generate

test – package – install – deployeclipse:eclipse/idea:idea

Page 10: Jeg har så vondt i  mvn

mvn introarchetype:generate

test – package – install – deployeclipse:eclipse/idea:idea

Page 11: Jeg har så vondt i  mvn

$ mvn deploy[INFO] Scanning for projects...[INFO] ------------------------------------------------------------------------[INFO] Building maven-demo[INFO] task-segment: [deploy][INFO] ------------------------------------------------------------------------[INFO] [resources:resources {execution: default-resources}][INFO] [compiler:compile {execution: default-compile}][INFO] [resources:testResources {execution: default-testResources}][INFO] [compiler:testCompile {execution: default-testCompile}][INFO] [surefire:test {execution: default-test}]

------------------------------------------------------- T E S T S-------------------------------------------------------Running no.steria.demo.AppTestTests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.029 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

compile

test-compile

test

Page 12: Jeg har så vondt i  mvn

[INFO] [jar:jar {execution: default-jar}][INFO] [install:install {execution: default-install}][INFO] Installing ...\maven-demo\target\maven-demo-1.0-SNAPSHOT.jar to $HOME\.m2\repository\ no\steria\demo\maven-demo\ 1.0-SNAPSHOT\maven-demo-1.0-SNAPSHOT.jar[INFO] [deploy:deploy {execution: default-deploy}]Uploading: scp:[email protected]:.../maven-demo-1.0-20110310.075455-2.jar[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESSFUL[INFO] ------------------------------------------------------------------------[INFO] Total time: 4 seconds[INFO] Finished at: Thu Mar 10 08:54:56 CET 2011[INFO] Final Memory: 19M/154M[INFO] ------------------------------------------------------------------------

package

install

deploy

Page 13: Jeg har så vondt i  mvn

mvn introarchetype:generate

test – package – install – deployeclipse:eclipse/idea:idea

Page 14: Jeg har så vondt i  mvn

mvn introarchetype:generate

test – package – install – deployeclipse:eclipse/idea:idea

Page 15: Jeg har så vondt i  mvn

$ mvn eclipse:eclipse[INFO] Scanning for projects...[INFO] Searching repository for plugin with prefix: 'eclipse'.[INFO] ------------------------------------------------------------------------[INFO] Building maven-demo[INFO] task-segment: [eclipse:eclipse][INFO] ------------------------------------------------------------------------[INFO] Preparing eclipse:eclipse[INFO] No goals needed for project - skipping[INFO] [eclipse:eclipse {execution: default-cli}][INFO] Using Eclipse Workspace: C:\Users\johannes\workspace[INFO] Adding default classpath container: org.eclipse.jdt.launching.JRE_CONTAINER[INFO] Not writing settings - defaults suffice[INFO] Wrote Eclipse project for "maven-demo" to C:\Users\johannes\workspace\tmp\maven-demo.[INFO] Sources for some artifacts are not available. Please run the same goal with the -DdownloadSources=true parameter in order to check remote repositories for sources. List of artifacts without a source archive: o junit:junit:3.8.1

[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESSFUL[INFO] ------------------------------------------------------------------------[INFO] Total time: 2 seconds[INFO] Finished at: Thu Mar 10 09:02:56 CET 2011[INFO] Final Memory: 15M/155M[INFO] ------------------------------------------------------------------------

-DdownloadSources

Page 16: Jeg har så vondt i  mvn
Page 17: Jeg har så vondt i  mvn
Page 18: Jeg har så vondt i  mvn

mvn basicsSNAPSHOT vs release-versions

repositoriesmodules

Page 19: Jeg har så vondt i  mvn

Jeg har så vondt i mvn

Page 20: Jeg har så vondt i  mvn

Jeg har så vondt i mvn

Transitive dependenciesFragmenterte prosjekter

Plugin overbruk

Page 21: Jeg har så vondt i  mvn

Dependency nightmare

Page 22: Jeg har så vondt i  mvn

$ mvn dependency:tree[INFO] Scanning for projects...[INFO] Searching repository for plugin with prefix: 'dependency'.[INFO] ------------------------------------------------------------------------[INFO] Building maven-demo[INFO] task-segment: [dependency:tree][INFO] ------------------------------------------------------------------------[INFO] [dependency:tree {execution: default-cli}][INFO] no.steria.demo:maven-demo:jar:1.0-SNAPSHOT[INFO] \- commons-logging:commons-logging:jar:1.1:compile[INFO] +- log4j:log4j:jar:1.2.12:compile[INFO] +- logkit:logkit:jar:1.0.1:compile[INFO] +- avalon-framework:avalon-framework:jar:4.1.3:compile[INFO] \- javax.servlet:servlet-api:jar:2.3:compile

Servlet-api!?!!

Page 23: Jeg har så vondt i  mvn

<dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1</version> <type>jar</type> <scope>compile</scope> <exclusions> <exclusion> <artifactId>servlet-api</artifactId> <groupId>javax.servlet</groupId> </exclusion> </exclusions></dependency>

Page 24: Jeg har så vondt i  mvn

“And Maven brought forth a Plague of Apache commons,

and there was a flood of all the Libraries of the Internet as a Judgment upon the people”

-Dan North, QCon London 2010

Page 25: Jeg har så vondt i  mvn

\- net.sourceforge.htmlunit:htmlunit:jar:2.8:compile +- xalan:xalan:jar:2.7.1:compile | \- xalan:serializer:jar:2.7.1:compile +- commons-collections:commons-collections:jar:3.2.1:compile +- commons-lang:commons-lang:jar:2.4:compile +- org.apache.httpcomponents:httpclient:jar:4.0.1:compile | \- org.apache.httpcomponents:httpcore:jar:4.0.1:compile +- org.apache.httpcomponents:httpmime:jar:4.0.1:compile | \- org.apache.james:apache-mime4j:jar:0.6:compile +- commons-codec:commons-codec:jar:1.4:compile +- net.sourceforge.htmlunit:htmlunit-core-js:jar:2.8:compile +- xerces:xercesImpl:jar:2.9.1:compile | \- xml-apis:xml-apis:jar:1.3.04:compile +- net.sourceforge.nekohtml:nekohtml:jar:1.9.14:compile +- net.sourceforge.cssparser:cssparser:jar:0.9.5:compile | \- org.w3c.css:sac:jar:1.3:compile +- commons-io:commons-io:jar:1.4:compile \- commons-logging:commons-logging:jar:1.1.1:compile

Xerces

Xalan? Hmm...

Én metode fra commons-lang

Commons-logging….

Og én fra commons-io

Én fra commons-coll

Page 26: Jeg har så vondt i  mvn

Dependency nightmareExcludes

Vote with your feetMake it better: Avoid reuse

Page 27: Jeg har så vondt i  mvn

Fragmenterte prosjekter

Page 28: Jeg har så vondt i  mvn

\- org.eclipse.jetty:jetty-plus:jar:8.0.0.M2:compile +- org.apache.geronimo.specs:geronimo-jta_1.1_spec:jar:1.1.1:compile +- org.eclipse.jetty:jetty-webapp:jar:8.0.0.M2:compile | +- org.eclipse.jetty:jetty-xml:jar:8.0.0.M2:compile | | \- org.eclipse.jetty:jetty-util:jar:8.0.0.M2:compile | \- org.eclipse.jetty:jetty-servlet:jar:8.0.0.M2:compile | \- org.eclipse.jetty:jetty-security:jar:8.0.0.M2:compile | \- org.eclipse.jetty:jetty-server:jar:8.0.0.M2:compile | +- org.mortbay.jetty:servlet-api:jar:3.0.20100224:compile | +- org.eclipse.jetty:jetty-continuation:jar:8.0.0.M2:compile | \- org.eclipse.jetty:jetty-http:jar:8.0.0.M2:compile | \- org.eclipse.jetty:jetty-io:jar:8.0.0.M2:compile \- org.eclipse.jetty:jetty-jndi:jar:8.0.0.M2:compile \- javax.mail:mail:jar:1.4.1:compile

12 moduler? Virkelig?

Page 29: Jeg har så vondt i  mvn

mvn-release-pluginliker ikke

SNAPSHOTs

Page 30: Jeg har så vondt i  mvn

Hvor ligger PersonDAO?

no.steria.person?no.steria.dao?

Page 31: Jeg har så vondt i  mvn

Konsistens?Koherens?

Page 32: Jeg har så vondt i  mvn

\- org.eclipse.jetty:jetty-plus:jar:8.0.0.M2:compile +- org.eclipse.jetty:jetty-webapp:jar:8.0.0.M2:compile \- org.eclipse.jetty:jetty-servlet:jar:8.0.0.M2:compile \- org.eclipse.jetty:jetty-server:jar:8.0.0.M2:compile \- org.eclipse.jetty:jetty-http:jar:8.0.0.M2:compile \- org.eclipse.jetty:jetty-io:jar:8.0.0.M2:compile

Eksempel: Du skal lage støtte for NIO. Hvor?

Page 33: Jeg har så vondt i  mvn

Når splitter du prosjekter?

Page 34: Jeg har så vondt i  mvn

Kun for deployment-behov!

Page 35: Jeg har så vondt i  mvn

Kun for deployment-behov!

\- no.steria.demo:demo-server-package:jar +- no.steria.demo:demo-web:war +- no.steria.demo:demo-core:jar \- no.steria.demo:demo-client:jar \- no.steria.demo:demo-core:jar (duplikat)

Page 36: Jeg har så vondt i  mvn

Fragmenterte prosjekterKoherens > Konsistens

Unngå å splitteDeployment kan kreve splitt

Page 37: Jeg har så vondt i  mvn

Plugins

Page 38: Jeg har så vondt i  mvn

PluginsJava > Mvn plugins

antrun-pluginMain-klasser

Page 39: Jeg har så vondt i  mvn

<plugins> <plugin> <groupId>org.mortbay.jetty</groupId>

<artifactId>maven-jetty-plugin</artifactId> <version>6.1.10</version> <configuration> <scanIntervalSeconds>10</scanIntervalSeconds> <stopKey>foo</stopKey> <stopPort>9999</stopPort> </configuration> <executions> <execution> <id>start-jetty</id> <phase>pre-integration-test</phase> <goals> <goal>run</goal> </goals> <configuration> <scanIntervalSeconds>0</scanIntervalSeconds> <daemon>true</daemon> </configuration> </execution> <execution> <id>stop-jetty</id> <phase>post-integration-test</phase> <goals> <goal>stop</goal> </goals> </execution> </executions> </plugin>

Portnummer?

Jetty versjon?

Data sources?

Debugging?

Flere kontekster?Integrasjon med tester?

Page 40: Jeg har så vondt i  mvn

import org.eclipse.jetty.plus.jndi.EnvEntry;import org.eclipse.jetty.server.Server;import org.eclipse.jetty.webapp.WebAppContext;

new EnvEntry(jndiDataSource, dataSource);Server server = new Server(0);server.setHandler( new WebAppContext("src/main/webapp", "/myapp"));server.start();

int localPort = server.getConnectors()[0].getLocalPort();

Page 41: Jeg har så vondt i  mvn

int localPort = server.getConnectors()[0].getLocalPort();String baseUrl = "http://localhost:" + localPort + "/";

WebDriver browser = createWebDriver();browser.get(baseUrl);browser.findElement( By.linkText("Create person")).click();browser.findElement( By.name("first_name")).sendKeys("Darth");browser.findElement( By.name("last_name")).sendKeys("Vader");browser.findElement( By.name("createPerson")).click();

Page 42: Jeg har så vondt i  mvn

<plugin> <artifactId>maven-antrun-plugin</artifactId> <executions> <execution> <configuration> <tasks> <property name="compile_classpath" refid="maven.compile.classpath" /> <java classname="fitnesse.Shutdown" fork="true"> <arg line="-p ${fitnesse.port}" /> <classpath> <pathelement path="${compile_classpath}" /> </classpath> </java> <java classname="fitnesseMain.FitNesseMain" fork="true" spawn="${fitnesse.spawn}"> <arg line="-p ${fitnesse.port}" /> <classpath> <pathelement path="${compile_classpath}" /> </classpath> </java> </tasks> </configuration> </execution> </executions></plugin>

Page 43: Jeg har så vondt i  mvn

<property name=“mvn_cp" refid="maven.compile.classpath" /><java classname="fitnesseMain.FitNesseMain" fork="true" spawn="true"> <arg line="-p ${fitnesse.port}" /> <classpath> <pathelement path="${mvn_cp}" /> </classpath></java>

Page 44: Jeg har så vondt i  mvn

PluginsJava > Mvn plugins

antrun-pluginMain-klasser

Page 45: Jeg har så vondt i  mvn

Oppsummering

Page 46: Jeg har så vondt i  mvn

OppsummeringDen som spiser pølsemat (transitive deps)og kjøttmat (fragmenterte prosjekt)hele dagenHan blir så doven og så latog får så vondt i mvn

Page 47: Jeg har så vondt i  mvn

OppsummeringMeeeeen…den som spiser gullerøtter (excludes)knekkebrød (dependency:tree)og peppernøtter (koherens),tyttebær (mvn-antrun-plugin)og bjørnebær (main klasser)og kålrot (sammenhengende moduler)og persille (Java-kode)

han blir så passe mett i magen,glad og lystig hele dagenog så lett i bena at han nesten ikke kan stå stille.

Page 48: Jeg har så vondt i  mvn

Takk for [email protected]

http://johannesbrodwall.comhttp://sterkblanding.no

twitter.com/jhannes