Total Pageviews

Showing posts with label maven. Show all posts
Showing posts with label maven. Show all posts

Thursday, January 02, 2014

Upgrading to Maven 3.1.1 caused Jenkins Maven Job to fail

After upgrading Maven on my Jenkins CI build server to version 3.1.1 (because the android-maven-plugin version 3.8.2 needs it) I encountered  problems with my Maven build jobs in Jenkins (version 1.544).
The error message looks something like this:

 ERROR: Failed to parse POMs  
 ...  
 ...  
 ...  
 Caused by: java.lang.ClassNotFoundException: org.apache.maven.cli.MavenLoggerManager  
      at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)  
      at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:259)  
      at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:235)  
      at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:227)  
      ... 18 more  

Googling around it seems someone else faced the same problem already. He also mentioned Jenkins issue JENKINS-15935 referring to that exact problem.
The solution is to update the Maven Project Plugin in Jenkins because the issue is fixed in Jenkins 1.509.
As of version 2.0 of the plugin, it is released separately but still bundled with Jenkins. Though, it might be the case, that the newest version of the plugin isn't bundled always with the jenkins release.

Wednesday, May 22, 2013

Essential resources when building Android Apps using Maven (and Eclipse)

If you plan to build your Android application on a build server like Jenkins, Hudson, etc ... you should switch from building your project with your IDE (in my case Eclipse) to a build system like Maven or Gradle.

I tried Gradle (using the new Gradle Build export in Eclipse ADT plugin) because the new Android Studio preview release by Google supports Gradle builds, but was totally disappointed by the poor performance of Gradle on my Jenkins CI build server. So I decided to use maven instead and found out about these resources which you have to read and understand:

  1. Maven Android Plugin:
    You need the plugin to build android projects using maven. With Android API 17 the latest stable release 3.5.3 doesn't work. You have to pull the plugin's source from GitHub and build version 3.5.4-SNAPSHOT by yourself.
  2. Android SDK Deployer:
    "Typically artifacts are available in Maven Central, however only the platform versions available in the Android Open Source Project are published to Maven Central. Newer versions of the platform as well as the compatibility package and proprietary extensions like the Google Maps support are not available there and need to be published to your Maven repository, if you want to use them in your Android project.
    The artifacts published to Maven central are available as dependencies under the groupId com.google.android with the artifactId android and android-test.
    The Maven Android SDK Deployer has been created to publish artifacts from the Android SDK into your local repository or repository server when using components that are not available in Central."


    I have taken this from the online book Maven - The Complete Reference by Sonatype.
    With Android API 17 you might run into the same bug like described above. So before building this project you must build version 3.5.4-SNAPSHOT of the Maven Android Plugin
  3. m2e-android:
    In case you use Eclipse, you can use this m2e plugin to add maven support to your Eclipse Android project.

Thursday, September 20, 2012

m2e and generating classes using jaxws-maven-plugin solved

Since m2e 1.0 (Maven integration for Eclipse) developers are complaining about issues with the jaxws-maven-plugin.

See here and here.

The m2e wiki offers documentation describing the issue and proposing solutions. For me, none of those suggestions worked.
The classes were not generated and I had to generate the classes using Maven from the command line and refresh the Eclipse workspace. Since upgrading m2e in my Eclipse 3.7 even that doesn't work anymore.

Googling around I found this project hosted on github solving all problems. After downloading and extracting the projects zip file to my computer I installed the connector plugin in Eclipse using the local directory on my computer as update site.
After restarting Eclipse, updating the Maven project configuration and doing a clean rebuild of the project all sources from the WSDL were generated and the project compiled without errors.

Thursday, April 19, 2012

Logging in Java: Switching to logback and slf4j

log4j was and maybe still is the de facto standard when it comes to logging in Java applications.
Sun's solution with the internal JDK logging could not be enforced across the board. The reasons for this are certainly the lack of configurability and flexibility. For simple projects the JDK logging is certainly a solution, but not for enterprise applications.

Now, in addition to log4j a new implementation that is more powerful, faster and more flexible than log4j has entered the market: logback. Ok, in fact logback was started in 2006, but version 1.0 was released in Nov. 2011.

logback has been created as a successor to log4j by the same developer and is now available after many years of testing and development in a version 1.0 (current version is 1.0.1). To avoid misunderstandings due to the small version number it should be said that logback is already in use for years in business and the version number does not reflect in any case a statement about the stability or functionality.

logback provides several advantages over log4j. Among other things:
  •      Much faster implementation
  •      Automatic reloading of logging configuration
  •      Better filter
  •      Automatic compression of archived log files
  •      Stack traces with information about the manufacturing Java Package (jar file)
  •      Automatic removal of old log archives

For the developer a switch from log4j to logback is very easy. Just switch a dependency in your Maven POM and you are ready to go:

 <dependency>  
   <groupId>ch.qos.logback</groupId>  
   <artifactId>logback-classic</artifactId>  
   <version>1.0.0</version>  
 </dependency>  

Thanks to the transitive dependencies you now also have the logging facade slf4j added to your project.
A "Hello World" example using slf4j looks like this:

 package demo;  
 import org.slf4j.Logger;  
 import org.slf4j.LoggerFactory;  
 public class HelloWorld {  
   public static void main(String[] args) {  
    Logger log = LoggerFactory.getLogger(HelloWorld.class);  
    log.info("Hello World");  
   }  
 }  

All that remains is a configuration file to control log output. 

With log4j it is usually called log4j.xml. With logback it is called logback.xml or logback-test.xml for testing environment.

In Maven projects the file logback.xml must be placed into $PROJECT_HOME/src/main/resources. The file logback-test.xml must be placed into $PROJECT_HOME/src/test/resources. A simple configuration looks like this:

 <configuration>  
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">  
   <!-- encoders are assigned the type  
      ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->  
   <encoder>  
    <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>  
   </encoder>  
  </appender>  
  <root level="debug">  
   <appender-ref ref="STDOUT" />  
  </root>  
 </configuration>  

The complete manual for logback is very detailed and available here.

Thursday, April 12, 2012

Adding Vaadin Add-Ons to your Maven managed application

One of the things I really like about Vaadin is the simplicity and the speed when developing the UI with Vaadin. Another great benefit of Vaadin is its Add-On directory where lots of useful add-ons are maintained and provided.

Add-Ons which implement client side UI must be recompiled by the GWT compiler to include them into your app.
To me it was not clear how to do that precisely despite the docs provided here and here.

I found this great blog article describing the necessary steps to use Add-ons with Maven. This is especially useful and described in detail for using Add-Ons which implement client side (JavaScript) code.

To minimize compile time I recommend to use a maven profile as described in the article. This prevents a GWT compilation of the widgetset each time the project is built.

In my case I used version 2.3.0 for GWT and for the gwt-maven-plugin.

Tuesday, March 20, 2012

Solution for "Sniffers with type [connector] and type [ejb] should not claim the archive at the same time"

In case you are using GlassFish it may happen you run into this error

"java.lang.IllegalArgumentException: Sniffers with type [connector] and type [ejb] should not claim the archive at the same time. Please check the packaging of your archive" 

In my case it happens when I deployed a web archive out of Eclipse directly into a running GlassFish instance on my machine using the GlassFish plugin. 
I tried a Google search for this error and found a blog posting by Adam Bien describing this error and a solution. Well, indeed my packaging was wrong. I accidentally bundled the artifact glassfish-embedded-all into my WAR archive and this was causing the trouble.
The solution is very simple: Either change the scope in your pom.xml to "provided" or - in case you don't need the dependency - remove it from the dependency section of your pom.
In my case it turns out that the dependency was not necessary anymore and I deleted it.

Wednesday, February 15, 2012

Howto dynamically change webservice endpoint URL with Metro

A really cool feature of Metro (and maybe other webservice stacks) is the possibility to change the webservice endpoint URL at runtime.
In general, you typically generate the code via JAX-WS maven plugin (or ant task), specifying the endpoint URL in the generation properties. This is a fast and reliable way to generate webservices. The downside is, that it seems you can't change the endpoint URL at runtime ...
Well, you can. And it is pretty simple.
The example in this posting is taken from the Metro FAQ.

You can use BindingProvider.ENDPOINT_ADDRESS_PROPERTY to set the endpoint address in your client application code.

Sample:

 //Create service and proxy from the generated Service class.   
  HelloService service = new HelloService();   
  HelloPort proxy = service.getHelloPort();   
  ((BindingProvider)proxy).getRequestContext().  
       put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://new/endpointaddress");   
     
  proxy.sayHello("Hello World!");   

With the property key

BindingProvider.ENDPOINT_ADDRESS_PROPERTY
you can also get the currently used endpoint url at runtime. This may be helpful for debugging purposes.
Sample:

 LOG.info("Using endpoint URL: "  
        + ((BindingProvider)proxy).getRequestContext().get(  
            BindingProvider.ENDPOINT_ADDRESS_PROPERTY));  

Thursday, February 02, 2012

Don't use commons lang < 2.4 with HtmlUnit

In case you have a project which has a dependency to Apache commons-lang and you plan to use the latest HtmlUnit (as of writing this post this is HtmlUnit 2.9) you should take care of the version of commons-lang.

HtmlUnit is using a method (startsWithIgnoreCase) from commons-lang that was introduced in commons-lang 2.4.
So any commons-lang version below 2.4 will produce runtime exceptions when using HtmlUnit. The stacktrace may be similar to this one:

 java.lang.NoClassDefFoundError: Could not initialize class  
 com.gargoylesoftware.htmlunit.WebClient  
     at net.sourceforge.jwebunit.htmlunit.HtmlUnitTestingEngineImpl.createWebClient(HtmlUnitTestingEngineImpl.java:804)  
     at net.sourceforge.jwebunit.htmlunit.HtmlUnitTestingEngineImpl.initWebClient(HtmlUnitTestingEngineImpl.java:813)  
   
 also :  
   
 java.lang.NoSuchMethodError:  
 org.apache.commons.lang.StringUtils.startsWithIgnoreCase(Ljava/lang/String;Ljava/lang/String;)Z  
     at com.gargoylesoftware.htmlunit.util.URLCreator$URLCreatorStandard.toUrlUnsafeClassic(URLCreator.java:66)  
     at com.gargoylesoftware.htmlunit.util.UrlUtils.toUrlUnsafe(UrlUtils.java:193)  
     at com.gargoylesoftware.htmlunit.util.UrlUtils.toUrlSafe(UrlUtils.java:171)  
     at com.gargoylesoftware.htmlunit.WebClient.<clinit>(WebClient.java:162)  
     at net.sourceforge.jwebunit.htmlunit.HtmlUnitTestingEngineImpl.createWebClient(HtmlUnitTestingEngineImpl.java:804)  
     at net.sourceforge.jwebunit.htmlunit.HtmlUnitTestingEngineImpl.initWebClient(HtmlUnitTestingEngineImpl.java:813)  
   
   
   

In case you use Maven as your build tool you can check the dependencies using the command:

mvn dependency:tree

To avoid this error you can declare version 2.6 of commons-lang in your project.

Saturday, June 27, 2009

Testing your EJB3 beans in an embedded EJB container using OpenEJB with Maven as build system

Intro

I am currently working on a private project implementing a web application using GWT as frontend and EJB3 as backend technology.
Testing my EJB3 beans using JUnit4 turned out to be very complicated. I had to manually inject all the required resources like EntityManager, EntityManagerFactory and all EJB3 beans the bean under test uses.
This may work for a simple project with a few beans but this will definitely not work for a huge project.
So I was looking for a better and less complicated way to test my beans.
Embedded Glassfish came to my mind, but this project isn't final yet, so I stumbled across a blog entry of Adam Bien's blog where he talks about OpenEJB and I thought just give it a try.
I use Maven as build system for all my projects so everything below this line just fits for Maven. If you use Ant or something different you may have to do other things to set up your testing environment.

Maven configuration

Using the OpenEJB embedded container is very easy. Just add the following dependency to your POM:

   <dependency>
      <groupId>org.apache.openejb</groupId>
      <artifactId>openejb-ejbd</artifactId>
      <version>3.1.1</version>
      <scope>test</scope>
   </dependency>

In my case it turns out that the dependency activeio-core version 3.0.0-incubator is not hosted in any publicly available maven repository (well at least not in those I use). So I grabbed it from here and pushed it into my running Nexus instance.
In case you use OpenJPA as your persistence provider you have to configure the Maven surefire plugin to use the OpenEJB Java Agent. This is described in detail on this OpenEJB site.

Necessary files

My project consists of three maven modules:
  1. project-entities (contains all JPA entities and the production persistence.xml under src/main/resources/META-INF)
  2. project-api (contains all session beans and services)
  3. project-webapp (the GWT web application)
In this article I concentrate on testing my session beans and services. So I will focus on the project-api module. It is absolutely important to create the file ejb-jar.xml under src/test/resources/META-INF in the project-api module.
Because I only work with annotations this file is nearly empty in my case. It just contains the following line:

<ejb-jar/>
 

In case you have configured a persistence.xml file under src/test/resource/META-INF of your module under test (in my case project-api) using RESOURCE_LOCAL I recommend to delete this file completely. In my case this file was interfering with the OpenEJB setup and all my beans were not deployed into the embedded container. Hence, my embedded tests were not working.

Configuring the OpenEJB embedded container for testing

Now it's time to configure the OpenEJB embedded container. This can be done in two ways. I will only explain the configuration in a JUnit base test class, so this can be used by all unit tests deriving from this class. There is another way in configuring the container using an XML file. Please consult the OpenEJB website for further details.
Like I said before, I am using Hibernate as persistence provider. The setup of the embedded container is done in a method annotated with the JUnit annotation @Before, so it get's called before a test is executed. You may wish to change this in a way it better fits into your environment (using @BeforeClass, etc ...)

  @Before
  public void initializeEmbeddedContainer() throws Exception {
    Properties properties = new Properties();
    properties.setProperty(Context.INITIAL_CONTEXT_FACTORY,
        "org.apache.openejb.client.LocalInitialContextFactory");

    ....
    ....
    ....
    context = new InitialContext(properties);
  }

In the above code snippet the bold lines are important. They are responsible for starting the embedded container. There are a few more properties you have to set to get the embedded tests running. Now you have to override the settings you made in your persistence.xml for running in OpenEJB.
The following lines will do that for you:
 

   properties.put("puName", "new://Resource?type=DataSource");
    properties.put("puName.JdbcDriver", "org.hsqldb.jdbcDriver");
    properties
        .put("puName.JdbcUrl", "jdbc:hsqldb:mem:testdatabase");
    properties.put("puName.hibernate.dialect",
        "org.hibernate.dialect.HSQLDialect");
    properties.put("puName.hibernate.hbm2ddl.auto", "update");

    properties.put("puName.hibernate.show_sql", "true");
    properties.put("puName.hibernate.format_sql", "true");

puName stands for persistence unitname. Please replace this with the real name of your persistence unit. The lines in bold are necessary. I am using HSQL DB, but this should work with any JDBC database. Don't forget to let Hibernate create the DB schema for you, otherwise your tests will fail because of non existent tables.
There is just another configuration property you may want to use: Restarting the OpenEJB embedded container between tests to avoid strange side effects in your tests. This is done by setting the property:

properties.put("openejb.embedded.initialcontext.close", "destroy");

But be aware that this property is an undocumented feature and may change in further versions of OpenEJB. This Jira entry recommends to achieve the same effect in configuring the maven surefire plugin.
So the complete method to initialize your in-container tests will look like this:

  @Before
  public void initializeEmbeddedContainer() throws Exception {
    Properties properties = new Properties();
    properties.setProperty(Context.INITIAL_CONTEXT_FACTORY,
        "org.apache.openejb.client.LocalInitialContextFactory");

    properties.put("puName", "new://Resource?type=DataSource");
    properties.put("puName.JdbcDriver", "org.hsqldb.jdbcDriver");
    properties
        .put("puName.JdbcUrl", "jdbc:hsqldb:mem:testdatabase");
    properties.put("puName.hibernate.dialect",
        "org.hibernate.dialect.HSQLDialect");
    properties.put("puName.hibernate.hbm2ddl.auto", "update");

    context = new InitialContext(properties);
  }
 

Setting up a unit test

The last thing to do now is getting your beans from the embedded container. This can be done in two ways. One way is to use a special OpenEJB annotation to inject the bean into your test class. As this is an elegant way I prefer to code this with plain old Java method calls using JNDI lookup, because the first solution will make your code depend on OpenEJB API.
This is how it works with local EJBs:

IServiceLocal localService = (IServiceLocal) getContext().lookup(ServiceImplLocal);

where IServiceLocal is the local interface of the session bean and ServiceImplLocal is the JNDI name of the bean implementation. The OpenEJB standard JNDI name for beans is {deploymentId}{interfaceType.annotationName}.
The deploymentId is the name of the EJB implementation (in our case ServiceImpl) and the interfaceType is Local, because the EJB under test is a local EJB.

Running your tests

Simply call
mvn clean test

Monday, November 05, 2007

Comparison of different Repository Managers

Deng Ching wrote a good blog entry about existing repository managers. Repository managers have become a big part in software development. Maven without a good organized and well structured repository would be useless. Besides Maven, repository managers can also be used by Ant or Ivy.
Please note that Deng Ching is a developer of Maven Archiva. So his comparison might be not as neutral as you might expect.

Friday, April 06, 2007

Resource filtering in Maven2 corrupts images in Jar archive

I had a very strange problem with the Maven2 resource filtering behaviour. I have a resource directory containing XML files and PNG images. Everytime I started to build a JAR archive of my project the images in there were corrupted.
It took me some time to identify the resource filtering as the source of the problem. My configuration filtered all files in that directory. So the images were filtered as well. If the resource plugin sees a filter token in a binary file which in configured to be filtered it replaces the token with the value.
So the solution is either to move the images to a different resource folder or use inclusions/exclusions on the filtered resource directory.
If you plan to just have a single resource directory your configuration of the resource filtering may look like this:




true
${basedir}/src/main/resources

**/*.jpg
**/*.gif
**/*.png



${basedir}/src/main/resources
false

**/*.jpg
**/*.gif
**/*.png




I found the solution in the user mailing list. The interesting posts are:
http://www.nabble.com/forum/ViewPost.jtp?post=4231228&framed=y&skin=177
and this one:
http://www.nabble.com/forum/ViewPost.jtp?post=4231635&framed=y&skin=177

Sunday, April 01, 2007

Maven 2.0.6 released

The Maven Team released Version 2.0.6 of their software today, on April 1st. Let's hope it's not an April fool's joke ;-)

Wednesday, February 14, 2007

Maven 2.0.5 released

The Maven team released version 2.0.5 of their software today. Checkout the release notes at: http://maven.apache.org/release-notes.html

Sunday, February 11, 2007

Dependency Management and package architecture in Java programs


When using Maven you get a lot of reports out of the box. Version control reports, code quality reports, javadocs, etc.
This blog entry focuses on code quality reports, especially on the JDepend report and other ways of measuring and controlling code quality.

Why is dependency management so important?

This is a question that will arise sooner or later in almost every software project. Good dependency management is the key to maintainable software. In conjunction with well designed package architecture the dependency management will save lots of time and money when it comes to maintain and take care of a released software.
Maven enforces you to think about your project artifacts and dependencies before you start to implement your software. Because it follows the principle: One artifact per Maven project. Thus you are able to separate different tiers of your software into small artifacts which can be compiled, tested and released independently of the release of the full software system.
Think of a web enterprise application bundled in an EAR archive. The application usually consists of several artifacts:
  • Foundation JAR archive(s)
  • EJB JAR archive(s)
  • Web application archive (WAR)
Every artifact can be tested independently from the others. Of course integration tests are often necessary to make sure the whole thing is still working. But it lets you concentrate on one point of your software system.
Things that must be avoided at any time are cyclic dependencies between those artifacts. For example, a method from an EJB JAR calls a method from a foundation JAR, and another method from the same foundation JAR calls an EJB JAR method. This would produce a cycle between the foundation tier and the EJB (Business Logic) tier. Maven is able to detect cycles and refuses to compile a project that contains cycles.
Even harder to detect are cycles between vertical slices in the same tier or cycles between logical layers of a physical artifact. Those cycles can be detected using JDepend. But JDepend is very limited and a System Architect is not able to define a logical architecture which can be controlled and oberved through the complete life of a software system. In this case you might want to consider the use of SonarJ or Sotograph. Why using a software to detect cycles? Because it is almost impossible for a human to see when a cycle creeps in!
Maven enforces you to keep an eye on your software design by providing a JDepend report out of the box. With JDepend you can control the couplings between packages and the stability or instability of particular packages or even cyclic dependencies between packages in your artifact.
If this is not enough for you and you would like to be able to define an architecture which can be controlled and observed by a Software Architect and/or the Software Developers have a closer look at the above mentioned SonarJ. It is recommend for middle-sized or big-sized software projects and can easily help you in maintaining and controlling your software design.
With SonarJ it is easily possible to declare allowed dependencies and directions between logical layers and vertical slices and to see when those dependencies or access directions are violated.

Wednesday, January 24, 2007

Release of IntelliJ IDEA Maven-2 Integration plugin 1.2.2

This is a bugfix release. The issue tracker is now hosted on JetBrains official JIRA site.

Release Notes - Maven-2 Integration
Version 1.2.2

Bug

  • [MAIDEA-46] - Multiple values (separated with spaces) in MAVEN_OPTS env variable causes build
  • [MAIDEA-47] - No possibility to declare JVM options (eg. -Xmx128m)

New Feature

  • [MAIDEA-48] - Add "site" phase to list of filtered phases

Release of IntelliJ IDEA Maven-2 Integration plugin 1.2.1

Well, the child now has a name: MAIDEA

Release Notes - MAIDEA - IntelliJ IDEA Maven-2 Plugin - Version 1.2.1

Bug

  • Environment errror when executiong jetty:run goal
  • InvalidDataException when settings.xml contains reference to settings XSD

Improvement

  • Provide better error handling (was: NullPointerException when running any phase)
  • Maven options should be assignable for each POM
  • Integrate Maven Embedder (don't require a preinstalled Maven)

New Feature

  • Show/Edit Maven options in tool window
  • Show/Edit Maven command line options in tool window
  • Provide "Open POM" popup menu entry in Tool Window when POM is selected
  • Allow opening of POMs with double click on POM in Tool Window
  • Have option to filter out uncommonly used phases

Task

  • Update Build documentation

Sunday, November 19, 2006

Using Maven Embedder and logging almost drove me nuts


I was recently experimenting with the maven embedder component (Version 2.0.4) to embed Maven into IDEA using the embedder API.

Somehow I called the setLogger(...) method AFTER I called maven.start(). This almost drove me crazy, because I didn't get any output. The trick is, to call the setLogger(...) method before a call to maven.start(), e.g. just like this (as described in the maven docs, see http://maven.apache.org/guides/mini/guide-embedding-m2.html):


MavenEmbedder maven = new MavenEmbedder();
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
maven.setClassLoader( classLoader );
maven.setLogger( new MavenEmbedderConsoleLogger() );
maven.start();



It seems that it is currently (in Version 2.0.4) not possible to set the logger after the embedder was started.


Maybe this is helpful for others.

Sunday, November 12, 2006

Release of IntelliJ IDEA Maven-2 Integration plugin 1.1


This version is a feature and bugfix release. Please checkout the release notes below and also the updated documentation on http://quebbemann.kicks-ass.net/idea-maven-plugin/usage.html

Important note:

Before
version 1.1 of the plugin, Maven was called via the start script
provided with the normal Maven installation. In order to get better
access to the running Maven process Maven now is called directly by
starting a Java process. This for example allows terminating the
running Maven process by the user.

Change notes:

Bug

  • Sorting of goals should not move Phases node from top position
  • Spaces in pathname of POM file causes build failure

Improvement


New Feature
  • Add a "Cancel Build" button to the build output window
  • Add a "Close Output" button to build output window
  • Add a "Pause Output" button to build output window
  • Add a "Rerun Maven" button to build output window

Task

  • Remove references to non-public Maven repository

Thursday, November 09, 2006

Release of IntelliJ IDEA Maven-2 Integration plugin 1.0.1


Version 1.0.1 is a bugfix release:
Bug
  • Removed reference to parent POM
Improvement
  • Minor changes in build process with Maven
  • Java sources for corresponding XML schemas are generated during the build using the xmlbeans-maven-plugin
  • Updated documentation on http://quebbemann.kicks-ass.net/idea-maven-plugin
  • Added more screenshots

Wednesday, October 25, 2006

Release of IntelliJ IDEA Maven-2 Integration plugin


Today I released a Maven-2 Integration plugin for IntelliJ IDEA 5.x and 6.x. It's in a very early state but already usable. Please checkout the plugin homepage for more details and screenshots.