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 3 changed 4 lines
!!!Inhalt
[{TableOfContents title='Page contents' numbered='true'}]
!!!Maven Installation
!Maven Installation
At line 13 changed one line
|MAVEN_OPTS|-Xmx512M -XX:MaxPermSize=256M -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC
|MAVEN_OPTS|-Xmx512M -XX:MaxPermSize=256M -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:+UseConcMarkSweepGC
At line 16 changed 2 lines
!!!Plugins
!!Ant als Plugin
!Artifact manuell installieren
At line 19 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>
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 41 changed one line
!!Exec plugin
Zusätzlich kann mit -Dsources=<file> und -Djavadoc=<file> die Sourcen und Javadocs installiert werden.
!Artifact deployen
At line 22 added 60 lines
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
}}}
{{{
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
}}}
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, nur beim Deployment scheint das nicht zu gehen.
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:
{{{
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>
}}}
!Exec plugin
{{{
At line 73 changed one line
!!Manual ant task
!Manual ant task
At line 105 changed 5 lines
!!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:
!Ant als Plugin
At line 111 changed 8 lines
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
<configuration>
<additionalparam>-Xdoclint:none</additionalparam>
</configuration>
</plugin>
<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 121 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
}}}
!Links
* EAR-Plugin [http://maven.apache.org/plugins/maven-ear-plugin/modules.html]
At line 126 changed 178 lines
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
!Debugging
At line 321 changed one line
!!!Profile unter Hudson aktivieren
!Profile unter Hudson aktivieren
At line 334 changed one line
!!!Authentication
!Authentication
At line 347 changed one line
!!!OS Profile
!OS Profile
At line 377 changed one line
!!!Proxy
!Proxy
At line 406 removed one line
!!Subversion
At line 416 changed 4 lines
!!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
!Eigener Wagon
At line 491 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.
!Eigenes Plugin
Maven-Projekt das ein Artifakt zum Verwenden als Plugin erzeugt:
At line 494 removed 12 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
!!!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:
At line 507 changed 4 lines
.level = INFO
handlers=java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.ConsoleHandler.level = ALL
<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>
At line 513 changed one line
Mehr dazu bei [https://support.sonatype.com/entries/23656571-Configuring-Maven-HTTP-Wagon-Detailed-Logging]
Anlegen eines sogenannten Mojos (Maven-Pojo). Parameter können statisch mit defaults, aus Maven-Parametern durch Expressions oder aus der Plugin-Konfiguration injeziert werden.
At line 515 changed 2 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.
{{{
/**
* @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;
At line 518 changed one line
In manchen Fällen ist es allerdings unvermeidbar, dafür gibt es das Shading-Plugin. Die Anwendung ist sehr einfach:
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
...
}
...
}
}}}
At line 427 added 2 lines
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
At line 521 changed 7 lines
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.0</version>
<executions>
<execution>
<phase>package</phase>
<?xml version="1.0" encoding="UTF-8"?>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
At line 529 changed one line
<goal>shade</goal>
<goal>generate-schema</goal>
At line 531 changed 3 lines
</execution>
</executions>
</plugin>
</pluginExecutionFilter>
<action>
<execute>
<runOnIncremental>false</runOnIncremental>
<runOnConfiguration>true</runOnConfiguration>
</execute>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
At line 536 changed 2 lines
!!!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.
!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 539 changed 2 lines
!!!Links
* EAR-Plugin [http://maven.apache.org/plugins/maven-ear-plugin/modules.html]
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