Author: pdodds
Date: Thu Aug 31 12:01:20 2006
New Revision: 439013
URL: http://svn.apache.org/viewvc?rev=439013&view=rev
Log:
Fix for SM-563 - its not pretty but it does work - basically the maven-project
is not maintaining the order of the dependencies on the model - therefore we
re-parse the model to get it back to its original state and thus back in the
correct order. This issue with Maven has been fixed and should be available in
2.0.5 (commented the code to note this).
Modified:
incubator/servicemix/trunk/tooling/jbi-maven-plugin/src/main/java/org/apache/servicemix/maven/plugin/jbi/GenerateServiceAssemblyDescriptorMojo.java
Modified:
incubator/servicemix/trunk/tooling/jbi-maven-plugin/src/main/java/org/apache/servicemix/maven/plugin/jbi/GenerateServiceAssemblyDescriptorMojo.java
URL:
http://svn.apache.org/viewvc/incubator/servicemix/trunk/tooling/jbi-maven-plugin/src/main/java/org/apache/servicemix/maven/plugin/jbi/GenerateServiceAssemblyDescriptorMojo.java?rev=439013&r1=439012&r2=439013&view=diff
==============================================================================
---
incubator/servicemix/trunk/tooling/jbi-maven-plugin/src/main/java/org/apache/servicemix/maven/plugin/jbi/GenerateServiceAssemblyDescriptorMojo.java
(original)
+++
incubator/servicemix/trunk/tooling/jbi-maven-plugin/src/main/java/org/apache/servicemix/maven/plugin/jbi/GenerateServiceAssemblyDescriptorMojo.java
Thu Aug 31 12:01:20 2006
@@ -17,6 +17,7 @@
package org.apache.servicemix.maven.plugin.jbi;
import java.io.File;
+import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
@@ -26,6 +27,8 @@
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter;
import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
@@ -81,11 +84,11 @@
* @parameter expression="${project.build.directory}/classes/META-INF"
*/
private String generatedDescriptorLocation;
-
- /**
- * Dependency graph
- */
- private JbiResolutionListener listener;
+
+ /**
+ * Dependency graph
+ */
+ private JbiResolutionListener listener;
public void execute() throws MojoExecutionException,
MojoFailureException {
@@ -109,7 +112,7 @@
// Generate jbi descriptor and copy it to the build directory
getLog().info("Generating jbi.xml");
try {
- listener = resolveProject();
+ listener = resolveProject();
generateJbiDescriptor();
} catch (JbiPluginException e) {
throw new MojoExecutionException("Failed to generate
jbi.xml", e);
@@ -139,7 +142,7 @@
File descriptor = new File(outputDir, JBI_DESCRIPTOR);
List serviceUnits = new ArrayList();
-
+
Set artifacts = project.getArtifacts();
for (Iterator iter = artifacts.iterator(); iter.hasNext();) {
Artifact artifact = (Artifact) iter.next();
@@ -151,8 +154,8 @@
&&
(artifact.getDependencyTrail().size() == 2)) {
MavenProject project = null;
try {
- project =
projectBuilder.buildFromRepository(artifact, remoteRepos,
- localRepo);
+ project =
projectBuilder.buildFromRepository(artifact,
+ remoteRepos, localRepo);
} catch (ProjectBuildingException e) {
getLog().warn(
"Unable to determine
packaging for dependency : "
@@ -163,8 +166,8 @@
&&
(project.getPackaging().equals("jbi-service-unit"))) {
DependencyInformation info = new
DependencyInformation();
info.setName(artifact.getArtifactId());
- String name = artifact.getFile().getName();
- name = name.substring(0, name.lastIndexOf('.')) + ".zip";
+ String name =
artifact.getFile().getName();
+ name = name.substring(0,
name.lastIndexOf('.')) + ".zip";
info.setFilename(name);
info.setComponent(getComponentName(project, artifacts,
artifact));
@@ -174,7 +177,7 @@
}
}
-
+
List orderedServiceUnits = reorderServiceUnits(serviceUnits);
JbiServiceAssemblyDescriptorWriter writer = new
JbiServiceAssemblyDescriptorWriter(
@@ -183,26 +186,53 @@
}
/**
- * Re-orders the service units to match order in the dependencies
section of the pom
+ * Re-orders the service units to match order in the dependencies
section of
+ * the pom
*
* @param serviceUnits
+ * @throws MojoExecutionException
*/
- private List reorderServiceUnits(List serviceUnits) {
- Iterator dependencies =
project.getModel().getDependencies().iterator();
+ private List reorderServiceUnits(List serviceUnits)
+ throws MojoExecutionException {
+
+ // TODO Currently we get the model back by re-parsing it
however in the
+ // future we should be able to use the getModel() - there
should be a
+ // fix post 2.0.4
+
+ // Iterator dependencies =
+ // project.getModel().getDependencies().iterator();
+
+ // For now we will need to reparse the pom without processing
+ Iterator dependencies = getReparsedDependencies();
+
List orderedServiceUnits = new ArrayList();
- while(dependencies.hasNext()) {
+ while (dependencies.hasNext()) {
Dependency dependency = (Dependency)
dependencies.next();
for (Iterator it = serviceUnits.iterator();
it.hasNext();) {
DependencyInformation serviceUnitInfo =
(DependencyInformation) it
.next();
- if
(dependency.getArtifactId().equals(serviceUnitInfo.getName())) {
+ if (dependency.getArtifactId()
+
.equals(serviceUnitInfo.getName())) {
+ System.out.println("Adding "
+ +
serviceUnitInfo.getFilename());
orderedServiceUnits.add(serviceUnitInfo);
}
}
- }
-
- return orderedServiceUnits;
+ }
+
+ return orderedServiceUnits;
+ }
+
+ private Iterator getReparsedDependencies() throws
MojoExecutionException {
+ MavenXpp3Reader mavenXpp3Reader = new MavenXpp3Reader();
+ try {
+ Model model = mavenXpp3Reader.read(new FileReader(new
File(project
+ .getBasedir(), "pom.xml")), false);
+ return model.getDependencies().iterator();
+ } catch (Exception e) {
+ throw new MojoExecutionException("Unable to reparse the
pom.xml");
+ }
}
private String getComponentName(MavenProject project, Set artifacts,
@@ -214,28 +244,30 @@
if (project.getProperties().getProperty("componentName") !=
null) {
return
project.getProperties().getProperty("componentName");
}
-
- JbiResolutionListener.Node n = listener.getNode(suArtifact);
- for (Iterator it = n.getChildren().iterator(); it.hasNext();) {
- JbiResolutionListener.Node child = (JbiResolutionListener.Node)
it.next();
- MavenProject artifactProject = null;
- try {
- artifactProject =
projectBuilder.buildFromRepository(child.getArtifact(),
- remoteRepos, localRepo);
- } catch (ProjectBuildingException e) {
- getLog().warn(
- "Unable to determine packaging for dependency : "
- + child.getArtifact().getArtifactId()
- + " assuming jar");
- }
- getLog().info("Project "+artifactProject+" packaged
"+artifactProject.getPackaging());
- if ((artifactProject != null)
- && (artifactProject.getPackaging()
- .equals("jbi-component"))) {
- return child.getArtifact().getArtifactId();
- }
- }
-
+
+ JbiResolutionListener.Node n = listener.getNode(suArtifact);
+ for (Iterator it = n.getChildren().iterator(); it.hasNext();) {
+ JbiResolutionListener.Node child =
(JbiResolutionListener.Node) it
+ .next();
+ MavenProject artifactProject = null;
+ try {
+ artifactProject =
projectBuilder.buildFromRepository(child
+ .getArtifact(), remoteRepos,
localRepo);
+ } catch (ProjectBuildingException e) {
+ getLog().warn(
+ "Unable to determine packaging
for dependency : "
+ +
child.getArtifact().getArtifactId()
+ + " assuming
jar");
+ }
+ getLog().info(
+ "Project " + artifactProject + "
packaged "
+ +
artifactProject.getPackaging());
+ if ((artifactProject != null)
+ &&
(artifactProject.getPackaging().equals("jbi-component"))) {
+ return child.getArtifact().getArtifactId();
+ }
+ }
+
throw new MojoExecutionException(
"The service unit "
+ project.getArtifactId()