A project that outputs a POM - maven-2

I am new to Maven and I'm trying to convert a web project to Maven build-able. My project has a dependency on the eclipse's BIRT reporting engine 2.6. I cannot find a public repository with a satisfactory BIRT pom, which is very sad because BIRT has TONS of dependencies (see this question, and my comment under the answer for more details). Is there some way that I can create a maven project that contains all of the BIRT .jars, and at build-time will output a pom, in which I can declare as a dependency in my web project?

You could create a pom similar to this one, which would list all the BIRT dependencies you need, but have the packaging as 'pom'. Then you declare a dependency on this pom and you will get those dependencies.

Related

missing maven dependencies in RCP product using tycho

I'm using tycho for creating a RCP product but as soon as I set the plugin pom
packaging to eclipse-plugin ,maven dependency library removes from project and cause lots of error because of missing library.I've tried running maven both on terminal and eclipse and they have the same result.Does anyone know how to fix this problem and is there someone that exported a complete RCP plugin using tycho?
thank you.
Tycho does not use maven dependencies to compile your plugin. Dependencies are specified using the plugin Manifest file as with a normal eclipse plugin.
In Eclipse, dependencies will be found using the workspace (assuming m2e & tycho configurators are installed) or from the plugins defined in your target platform (typically the eclipse installation). On the command line, these dependencies should be available in a p2 repository - these can be defined in a target definition file or in a normal maven repository block in the pom file with the p2 layout. See [1] for details on using these.
It is possible to configure Tycho to consider pom dependencies but this will not work when exporting an RCP application - dependencies need to be found in a p2 repository.
[1] http://wiki.eclipse.org/Tycho/Reference_Card#Repository_providing_the_context_of_the_build

How to find the artifacts that depend on another artifact?

We are using Maven to build our projects and Nexus as repository manager.
Is there a way to know where an artifact is a dependency of another artifact?
For example, we want to know which of the artifacts in our Release repository have a dependency on commons-io 1.2, or version x.y of our framework2, or ...
mvn dependency:tree should help you get this info.
Have you looked at the Maven Site plugin in conjunction with the dependencies and dependencies-convergence report from the Maven Project Info Reports plugin?
This will generate an html report that shows all the artifacts that the project uses and what other artifacts that are dependent on that artifact.
The Maven client will only tell you the dependencies of a single project. I'd recommend using Sonar as part of your build process. It's primarily used for source code analysis, but it will also report usage of a particular library by other projects in the same Sonar database.

converting websphere portal project to maven

I am working on converting websphere portal project to maven framework for CI build. I am wondering if there is a way to reference websphere jars other than via dependencies in pom.xml and loading them all to maven repository? I cannot imagine loading them ALL to the repository...
Please advice! Thanks!
When using Maven, it is advisable that all dependent jars are installed in the repository. Even Websphere ones.
Ideally a corporate repository will come in handy here, so that you keep a separate repository for all the Websphere jars accessible to all the users in your project. See http://maven.apache.org/repository-management.html for more.
If this is not an option, then use the local file repository explained on a previous questions - here.
You'll still need to add each dependency in POM.
Also read http://sdudzin.blogspot.com/2007/09/maven-2-and-websphere-automated-build.html
if you have a lot of projects that require this, you can also create a parent pom that would have all the dependencies so your project/module/portlet poms are cleaner.

I can't find the maven plugin org.maven.ide.eclipse:lifecycle-mapping 0.9.9-SNAPSHOT

I have a maven pom file which depends on this plugin, but I can't find it anywhere online. Is this something which needs to be built from some other piece of code?
I searched in Sonatype repository and svn but I also didn't find jar nor sources. Customizable build lifecycle mappings is a experimental feature in m2eclipse. So if you don't need this feature you can comment this plugin.
Edit
After some tests I've noticed that if you use Maven 3.0 Embedded runtime your pom will work without complain, but there is still no jar for this plugin in the repository. So there is some kind of magic or I need to read more about Maven3/Embedded :)
alt text http://img683.imageshack.us/img683/7041/m2eclipse.png

How do I combine library code and a maven plugin in same project?

Can I make a single maven project that can be included as a dependency (to reference Java classes inside) and executed as a plugin?
I'm working on a library to help with hosting GWT on a LAMP stack. For someone to use this, they need to extend some Java classes (so it must be a dependency) and they need to invoke a maven plugin (so it needs to be a plugin). The plugin code references the same Java classes, so if they are seperate projects, the plugin one must depend on the library one.
As is, I have the library as a normal maven project, and the plugin as a maven plugin that depends on the library. This means that to do a release, I have to release two different artifacts, and the dependent project must update both version numbers for both artifacts. It'd be nice to have a single project.
You'd be better of by doing the following
project for the jar, Foo:Foo.jar
project that uses Foo:Foo.jar as a
dependency that builds the plugin
Maven parent project that
builds 1&2
The directory structure would look like this
\project\pom.xml
\project\foo\pom.xml
\project\foo\src\main\java\foo.java
\project\plugin\pom.xml
\project\plugin\src\main\resources
\project\plugin\src\main\java
From \project you can do a mvn clean package to build \project\foo\target\foo.jar and \project\plugin\target\plugin.jar
Hope this helps.
If you create a maven plugin it still has a artifactId/groupId/version. There's no reason it can't be references both in your section and in your section. On the other hand, if thats ugly, why not just make a library with the common code that both your main project and your maven plugin project depend on?
EDIT:
Sorry, wasn't clear on the second part. Look into composite maven projects, where there is a top level pom that defines a number of child modules. In this case, the maven plugin and the common library code could be separate children producing separate artifacts, but you only need one version number and one release command executed from the top level. I haven't done this but there are any number of open source projects that do. its often used as an idiom to put testing code into a single module that can be referenced by all the others, without having it go out in any distributable jar.
The best practice is to not do what you're suggesting. Examples of this include PMD, BND, JUnit/TestNG, and so on - no serious projects seem to package the maven plugin with the library proper.
One way to get both alternatives is to use maven assemblies to have two seperate maven projects for each the library proper and the plugin and then a separate packaging as a jar containing the classes from both.