This page (revision-48) was last changed on 28-Jul-2015 06:43 by Dieter Käppel

This page was created on 02-Jun-2009 22:02 by Dieter Käppel

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Page revision history

Version Date Modified Size Author Changes ... Change note
48 28-Jul-2015 06:43 16 KB Dieter Käppel to previous
47 28-Jul-2015 06:43 16 KB Dieter Käppel to previous | to last
46 13-Apr-2015 18:43 15 KB Dieter Käppel to previous | to last
45 14-Mar-2014 23:25 15 KB Dieter Käppel to previous | to last
44 02-Mar-2014 16:05 15 KB Dieter Käppel to previous | to last
43 15-Oct-2013 08:07 14 KB Dieter Käppel to previous | to last
42 09-Aug-2013 04:32 14 KB Dieter Käppel to previous | to last
41 17-May-2013 10:26 13 KB Dieter Käppel to previous | to last

Page References

Incoming links Outgoing links

Version management

Difference between version and

At line 1 changed one line
Maven ist ein Build-System für komplexe Projekte.
Maven ist ein Build-System für komplexe [Java]-Projekte.
At line 3 changed 4 lines
!Artifact manuell installieren
{{{
mvn install:install-file -DgroupId=com.intersult -DartifactId=com.intersult.skin -Dversion=1.0-SNAPSHOT -DgeneratePom=true -Dfile=com.intersult.skin-1.0-SNAPSHOT.jar -Dpackaging=jar
}}}
!!!Inhalt
[{TableOfContents title='Page contents' numbered='true'}]
At line 8 changed one line
Zusätzlich kann mit -Dsources=<file> und -Djavadoc=<file> die Sourcen und Javadocs installiert werden.
!!!Maven Installation
Die Version 3.0.3 verwendet die [Java] URLConnection, ab Version wird wieder Apache URL Client verwendet, der Probleme mit NTLM hat.
At line 10 changed 4 lines
!Artifact deployen
{{{
mvn deploy:deploy-file -DgroupId=com.intersult -DartifactId=com.intersult.skin -Dversion=1.0 -Dpackaging=jar -Dfile=target/com.intersult.skin-1.0-SNAPSHOT.jar -Durl=file://W:\deploy\repository.war -DrepositoryId=intersult-repository
}}}
Es empfehlen sich folgende Variablen:
At line 15 changed 3 lines
{{{
C:\Java\workspace\import\agt-war>mvn deploy:deploy-file -DgroupId=ojdbc -DartifactId=ojdbc14 -Dversion=9.0.2.0.0 -Dpackaging=jar "-Dfile=C:\Java\lib\ojdbc14.jar" -DrepositoryId=intersult-repo -Durl=svn:https://intersult.com/svn/public/maven
}}}
||Name||Wert
|M2_HOME|C:\Java\apache-maven-3.0.3\
|MAVEN_OPTS|-Xmx512M -XX:MaxPermSize=256M -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC
|PATH|%PATH%;%M2_HOME%/bin
At line 19 changed 7 lines
Falls ein spezieller Wagon verwendet werden soll (Transportschicht für das Protocol-Handling), kann dieser und die Dependencies in <maven-home>/lib abgelegt werden (z.B. maven-svn-wagon-1.4.jar, svnkit-1.3.5.jar).
Beim deployen kann -Dsources=<file> und -Djavadoc=<file> __nicht__ verwendet werden, die Files müssen getrennt hochgeladen werden mit -Dpackaging=java-source und -DgeneratePom=false
!Glassfish deployen
__Achtung:__ Die [Intersult] hat das [Maven Glassfish Plugin] erweitert.
Command line:
!!!Plugins
!!Ant als Plugin
At line 27 changed one line
mvn glassfish:deploy
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<echo message="${os.family}"/>
<echo message="${os.arch}"/>
</target>
</configuration>
</execution>
</executions>
</plugin>
At line 29 removed 18 lines
Plugin config:
{{{
<plugin>
<groupId>org.glassfish.maven.plugin</groupId>
<artifactId>maven-glassfish-plugin</artifactId>
<version>2.1</version>
<configuration>
<domain>
<name>domain1</name>
<adminPort>4848</adminPort>
</domain>
<glassfishDirectory>${env.GLASSFISH_HOME}</glassfishDirectory>
<user>admin</user>
<adminPassword>adminadmin</adminPassword>
<echo>true</echo>
</configuration>
</plugin>
}}}
At line 48 changed 2 lines
!JBoss deployen
Command line:
!!Exec plugin
At line 51 removed 21 lines
mvn jboss:redeploy
}}}
Plugin config:
{{{
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jboss-maven-plugin</artifactId>
<version>1.4</version>
<configuration>
<hostName>localhost</hostName>
<port>8080</port>
<serverName>default</serverName>
<fileNames>
<fileName>${project.build.directory}/${project.build.finalName}.${project.packaging}</fileName>
</fileNames>
</configuration>
</plugin>
}}}
!Exec plugin
{{{
At line 102 changed one line
!Manual ant task
!!Manual ant task
At line 134 changed one line
!Ant als Plugin
!!Javadoc Plugin
Das Javadoc-JAR kann mit javadoc:attach-javadocs generiert werden.
Seit Java 8 gibt es Compilierfehler, die mit einer Configuration behoben werden können:
At line 136 changed 20 lines
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<echo message="${os.family}"/>
<echo message="${os.arch}"/>
</target>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
<configuration>
<additionalparam>-Xdoclint:none</additionalparam>
</configuration>
</plugin>
At line 158 changed 2 lines
!Links
* EAR-Plugin [http://maven.apache.org/plugins/maven-ear-plugin/modules.html]
!!!Artifact manuell installieren
{{{
mvn install:install-file -DgroupId=com.intersult -DartifactId=com.intersult.skin -Dversion=1.0-SNAPSHOT -DgeneratePom=true -Dfile=com.intersult.skin-1.0-SNAPSHOT.jar -Dpackaging=jar
}}}
At line 161 changed one line
!Debugging
Zusätzlich kann mit -Dsources=<file> und -Djavadoc=<file> die Sourcen und Javadocs installiert werden.
!!Eigenes Plugin
Maven-Projekt das ein Artifakt zum Verwenden als Plugin erzeugt:
{{{
<project>
...
<packaging>maven-plugin</packaging>
...
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.sonatype.plexus</groupId>
<artifactId>plexus-build-api</artifactId>
<version>0.0.7</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
<version>1.5.8</version>
</dependency>
...
</dependencies>
...
</project>
}}}
Anlegen eines sogenannten Mojos (Maven-Pojo). Parameter können statisch mit defaults, aus Maven-Parametern durch Expressions oder aus der Plugin-Konfiguration injeziert werden.
{{{
/**
* @goal encode
* @phase generate-resources
*/
public class EncodingMojo extends AbstractMojo {
/*
* @parameter default-value="src/main/resources"
*/
protected File src;
/**
* @parameter expression="${project}"
* @readonly
*/
protected MavenProject project;
/**
* @parameter
* @required
*/
protected Resource resource;
/** @component */
private BuildContext buildContext;
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
...
}
...
}
}}}
Bei Verwendung in Eclipse ab Indigo wird das Maven-Plugin von Eclipse selbst geliefert (M2E). Dies erfordert eine erweiterte Konfiguration des Plugins, da es sonst zu Fehlern im Lifecycle kommt. Dazu wird eine Datei angelegt /<project>/src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml
{{{
<?xml version="1.0" encoding="UTF-8"?>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<goals>
<goal>generate-schema</goal>
</goals>
</pluginExecutionFilter>
<action>
<execute>
<runOnIncremental>false</runOnIncremental>
<runOnConfiguration>true</runOnConfiguration>
</execute>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
}}}
!!Ausführung unterbinden
Möchte man zum Beispiel bei einem Projekttyp WAR unterbinden, dass das Ausführen des maven-war-plugins unterbunden wird, kann man die Phase none verwenden:
{{{
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>default-war</id>
<phase>none</phase>
</execution>
</executions>
</plugin>
}}}
!!!Artifact deployen
{{{
mvn deploy:deploy-file -DgroupId=com.intersult -DartifactId=com.intersult.skin -Dversion=1.0 -Dpackaging=jar -Dfile=target/com.intersult.skin-1.0-SNAPSHOT.jar -Durl=svn:https://intersult.com/svn/public/maven -DrepositoryId=intersult-repo
}}}
Falls ein spezieller Wagon verwendet werden soll (Transportschicht für das Protocol-Handling), kann dieser und die Dependencies in <maven-home>/lib abgelegt werden (z.B. maven-svn-wagon-1.4.jar, svnkit-1.3.5.jar). Diese befinden sich im lokalen Repository, weil Maven diese Wagons sowieso zum Download benutzt.
Beim deployen kann -Dsources=<file> und -Djavadoc=<file> __nicht__ verwendet werden, die Files müssen getrennt hochgeladen werden mit -Dpackaging=java-source und -DgeneratePom=false
!!!Application Server
!!Glassfish deployen
__Achtung:__ Die [Intersult] hat das [Maven Glassfish Plugin] erweitert.
Command line:
{{{
mvn glassfish:deploy
}}}
Plugin config:
{{{
<plugin>
<groupId>org.glassfish.maven.plugin</groupId>
<artifactId>maven-glassfish-plugin</artifactId>
<version>2.1</version>
<configuration>
<domain>
<name>domain1</name>
<adminPort>4848</adminPort>
</domain>
<glassfishDirectory>${env.GLASSFISH_HOME}</glassfishDirectory>
<user>admin</user>
<adminPassword>adminadmin</adminPassword>
<echo>true</echo>
</configuration>
</plugin>
}}}
!!JBoss deployen
Command line:
{{{
mvn jboss:redeploy
}}}
Plugin config:
{{{
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jboss-maven-plugin</artifactId>
<version>1.4</version>
<configuration>
<hostName>localhost</hostName>
<port>8080</port>
<serverName>default</serverName>
<fileNames>
<fileName>${project.build.directory}/${project.build.finalName}.${project.packaging}</fileName>
</fileNames>
</configuration>
</plugin>
}}}
!!!Nexus Artifact Repsitory
Die Artifacts werden in einem Repository abgelegt. Dabei sind viele Systeme dafür zu gebrauchen, das Dateisystem per file-URL, ein Web-Server per http-URL, ein SVN-Server per svn-URL und so weiter. Darüber hinaus gibt es explizite Repositories, der bekannteste darunter ist der Nexus. Dieser bietet sich auch an, weil er vom Hersteller von Maven kommt.
!!Logfile anzeigen
Grundsätzlich kann das Logfile über die Oberfläche unter Administration -> System Files -> nexus.log angezeigt werden. Eine Alternative ist ein direkter Link [http://localhost/nexus/service/local/logs/nexus.log].
!!!Debugging
At line 179 changed one line
!Profile unter Hudson aktivieren
!!!Profile unter Hudson aktivieren
At line 192 changed one line
!Authentication
!!!Authentication
At line 205 changed one line
!OS Profile
!!!OS Profile
At line 235 changed one line
!Proxy
!!!Proxy
At line 381 added 10 lines
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository/>
<interactiveMode/>
<usePluginRegistry/>
<offline/>
<pluginGroups/>
<servers/>
<mirrors/>
At line 401 added 3 lines
<profiles/>
<activeProfiles/>
</settings>
At line 406 added one line
!!Subversion
At line 260 changed one line
!Eigener Wagon
!!NTLM Authentifizierung
Seit Maven 3.0.4 wird mit dem Apache-HTTP-Client gearbeitet, der keine transparente NTLM-Authentifierung unter Windows beherrscht. Um dies wieder möglich zu machen, kann man den HTTP-Lightweight-Wagon ins ext-Verzeichnis der Maven-Installation kopieren.
!!!Eigener Wagon
At line 332 changed 2 lines
!Eigenes Plugin
Maven-Projekt das ein Artifakt zum Verwenden als Plugin erzeugt:
!!!HTTP-Connections
Bei den unterschiedlichen Maven-Versionen wurde sehr viel an der HTTP-Verbindung verändert. Anfangs verwendete Maven den Apache HttpClient, bis Version 3.0.3 wurde dann Java URLConnection verwendet.
At line 335 changed 32 lines
{{{
<project>
...
<packaging>maven-plugin</packaging>
...
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.sonatype.plexus</groupId>
<artifactId>plexus-build-api</artifactId>
<version>0.0.7</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
<version>1.5.8</version>
</dependency>
...
</dependencies>
...
</project>
}}}
Version 3.0.4 verwendet nun wieder HttpClient 4.1.2. Diese Version arbeitet generell wieder besser als die Versionen Maven 2.*, allerdings geht kein transparentes NTML mehr (Windows-Authentifizierung). In diesem Fall ist 3.0.3 zu verwenden.
At line 368 changed one line
Anlegen eines sogenannten Mojos (Maven-Pojo). Parameter können statisch mit defaults, aus Maven-Parametern durch Expressions oder aus der Plugin-Konfiguration injeziert werden.
!!!Eclipse Classpath Fehler
Bei Eclipse tritt momentan noch häufiger auf: "Updating Maven Project". Unsupported IClasspathEntry kind=4. Lösung:
At line 370 changed 25 lines
{{{
/**
* @goal encode
* @phase generate-resources
*/
public class EncodingMojo extends AbstractMojo {
/*
* @parameter default-value="src/main/resources"
*/
protected File src;
/**
* @parameter expression="${project}"
* @readonly
*/
protected MavenProject project;
/**
* @parameter
* @required
*/
protected Resource resource;
/** @component */
private BuildContext buildContext;
* __Disable Maven Nature:__ Kontextmenü auf dem Projekt -> Maven -> Disable Maven Nature
* __Clean:__ Aus Kommandozeile mvn eclipse:clean
* __Enable Maven Nature:__ Kontextmenü -> Configure -> Convert to Maven Project
At line 396 changed 6 lines
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
...
}
...
}
!!!Logging
Bei der Version 3.0.4.X (RC3?) kommt es zu einem exzessiven Logging von Cookie-Problemen. Auch sonst kann eine Konfiguration des Loggings nützlich sein. Dazu legt man die Datei %HOME%/.m2/logging.properties an:
{{{
.level = INFO
handlers=java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.ConsoleHandler.level = ALL
At line 404 changed one line
Bei Verwendung in Eclipse ab Indigo wird das Maven-Plugin von Eclipse selbst geliefert (M2E). Dies erfordert eine erweiterte Konfiguration des Plugins, da es sonst zu Fehlern im Lifecycle kommt. Dazu wird eine Datei angelegt /<project>/src/main/resources/META-INF/m2e/lifecycle-mapping-metadata.xml
Mehr dazu bei [https://support.sonatype.com/entries/23656571-Configuring-Maven-HTTP-Wagon-Detailed-Logging]
At line 515 added 5 lines
!!!Shading
Mit [Maven] ist es möglich, Abhängigkeiten in ein produziertes JAR mit aufzunehmen, also umzupacken. Dies wird als Shading bezeichnet. Grundsätzlich ist dies keine empfohlene Vorgehensweise, die Abhängigkeiten sollten nach aller Möglichkeit in eigenen JAR-Dateien bleiben.
In manchen Fällen ist es allerdings unvermeidbar, dafür gibt es das Shading-Plugin. Die Anwendung ist sehr einfach:
At line 407 changed 5 lines
<?xml version="1.0" encoding="UTF-8"?>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.0</version>
<executions>
<execution>
<phase>package</phase>
At line 413 changed one line
<goal>generate-schema</goal>
<goal>shade</goal>
At line 415 changed 10 lines
</pluginExecutionFilter>
<action>
<execute>
<runOnIncremental>false</runOnIncremental>
<runOnConfiguration>true</runOnConfiguration>
</execute>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</execution>
</executions>
</plugin>
At line 427 changed 2 lines
!HTTP-Connections
Bei den unterschiedlichen Maven-Versionen wurde sehr viel an der HTTP-Verbindung verändert. Anfangs verwendete Maven den Apache HttpClient, bis Version 3.0.3 wurde dann Java URLConnection verwendet.
!!!Build Number
Bisher gab es das buildnumber-maven-plugin mit dem das aktuelle Build Date als Variable abgefragt werden kann. Ab Maven 3 ist diese Variable als maven.build.timestamp fest eingebaut. Das Format kann über das Property maven.build.timestamp.format nochmal verändert werden, Default ist yyMMdd_HHmm.
At line 430 changed 8 lines
Version 3.0.4 verwendet nun wieder HttpClient 4.1.2. Diese Version arbeitet generell wieder besser als die Versionen Maven 2.*, allerdings geht kein transparentes NTML mehr (Windows-Authentifizierung). In diesem Fall ist 3.0.3 zu verwenden.
!Eclipse Classpath Fehler
Bei Eclipse tritt momentan noch häufiger auf: "Updating Maven Project". Unsupported IClasspathEntry kind=4. Lösung:
* __Disable Maven Nature:__ Kontextmenü auf dem Projekt -> Maven -> Disable Maven Nature
* __Clean:__ Aus Kommandozeile mvn eclipse:clean
* __Enable Maven Nature:__ Kontextmenü -> Configure -> Convert to Maven Project
!!!Links
* EAR-Plugin [http://maven.apache.org/plugins/maven-ear-plugin/modules.html]