You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/02/21 17:53:52 UTC
svn commit: r1291909 - in /openejb/trunk/maven-plugins: ./
spi-helper-jee6-profile/ spi-helper-jee6-profile/src/
spi-helper-jee6-profile/src/main/ spi-helper-jee6-profile/src/main/resources/
spi-helper-jee6-profile/src/main/resources/org/ spi-helper-je...
Author: rmannibucau
Date: Tue Feb 21 16:53:51 2012
New Revision: 1291909
URL: http://svn.apache.org/viewvc?rev=1291909&view=rev
Log:
externalizing profiles
Added:
openejb/trunk/maven-plugins/spi-helper-jee6-profile/
openejb/trunk/maven-plugins/spi-helper-jee6-profile/pom.xml
openejb/trunk/maven-plugins/spi-helper-jee6-profile/src/
openejb/trunk/maven-plugins/spi-helper-jee6-profile/src/main/
openejb/trunk/maven-plugins/spi-helper-jee6-profile/src/main/resources/
openejb/trunk/maven-plugins/spi-helper-jee6-profile/src/main/resources/org/
openejb/trunk/maven-plugins/spi-helper-jee6-profile/src/main/resources/org/apache/
openejb/trunk/maven-plugins/spi-helper-jee6-profile/src/main/resources/org/apache/xbean/
openejb/trunk/maven-plugins/spi-helper-jee6-profile/src/main/resources/org/apache/xbean/profile.properties
Modified:
openejb/trunk/maven-plugins/pom.xml
openejb/trunk/maven-plugins/spi-helper-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/spi/SpiMojo.java
Modified: openejb/trunk/maven-plugins/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/maven-plugins/pom.xml?rev=1291909&r1=1291908&r2=1291909&view=diff
==============================================================================
--- openejb/trunk/maven-plugins/pom.xml (original)
+++ openejb/trunk/maven-plugins/pom.xml Tue Feb 21 16:53:51 2012
@@ -40,6 +40,7 @@
<module>maven-util</module>
<module>spi-helper-maven-plugin</module>
<module>xbean-xml</module>
+ <module>spi-helper-jee6-profile</module>
</modules>
<dependencyManagement>
Added: openejb/trunk/maven-plugins/spi-helper-jee6-profile/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/maven-plugins/spi-helper-jee6-profile/pom.xml?rev=1291909&view=auto
==============================================================================
--- openejb/trunk/maven-plugins/spi-helper-jee6-profile/pom.xml (added)
+++ openejb/trunk/maven-plugins/spi-helper-jee6-profile/pom.xml Tue Feb 21 16:53:51 2012
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>maven-plugins-parent</artifactId>
+ <groupId>org.apache.openejb</groupId>
+ <version>0.0.1-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>spi-helper-jee6-profile</artifactId>
+ <name>OpenEJB Maven Plugins :: JEE6 profile</name>
+</project>
Added: openejb/trunk/maven-plugins/spi-helper-jee6-profile/src/main/resources/org/apache/xbean/profile.properties
URL: http://svn.apache.org/viewvc/openejb/trunk/maven-plugins/spi-helper-jee6-profile/src/main/resources/org/apache/xbean/profile.properties?rev=1291909&view=auto
==============================================================================
--- openejb/trunk/maven-plugins/spi-helper-jee6-profile/src/main/resources/org/apache/xbean/profile.properties (added)
+++ openejb/trunk/maven-plugins/spi-helper-jee6-profile/src/main/resources/org/apache/xbean/profile.properties Tue Feb 21 16:53:51 2012
@@ -0,0 +1,53 @@
+name = jee6
+
+annotations = javax.annotation.ManagedBean,\
+ javax.annotation.PostConstruct,\
+ javax.annotation.PreDestroy,\
+ javax.annotation.Resource,\
+ javax.annotation.Resources,\
+ javax.annotation.security.DenyAll,\
+ javax.annotation.security.PermitAll,\
+ javax.annotation.security.RolesAllowed,\
+ javax.annotation.sql.DataSourceDefinition,\
+ javax.ejb.AfterBegin,\
+ javax.ejb.AfterCompletion,\
+ javax.ejb.ApplicationException,\
+ javax.ejb.Asynchronous,\
+ javax.ejb.BeforeCompletion,\
+ javax.ejb.ConcurrencyManagement,\
+ javax.ejb.DependsOn,\
+ javax.ejb.EJB,\
+ javax.ejb.EJBs,\
+ javax.ejb.Init,\
+ javax.ejb.LocalBean,\
+ javax.ejb.LocalHome,\
+ javax.ejb.MessageDriven,\
+ javax.ejb.PostActivate,\
+ javax.ejb.PrePassivate,\
+ javax.ejb.RemoteHome,\
+ javax.ejb.Remove,\
+ javax.ejb.Schedule,\
+ javax.ejb.Schedules,\
+ javax.ejb.Singleton,\
+ javax.ejb.Stateful,\
+ javax.ejb.Stateless,\
+ javax.ejb.Timeout,\
+ javax.enterprise.inject.Specializes,\
+ javax.interceptor.AroundInvoke,\
+ javax.interceptor.AroundTimeout,\
+ javax.interceptor.ExcludeClassInterceptors,\
+ javax.interceptor.ExcludeDefaultInterceptors,\
+ javax.interceptor.Interceptors,\
+ javax.jws.WebService,\
+ javax.persistence.PersistenceContext,\
+ javax.persistence.PersistenceContexts,\
+ javax.persistence.PersistenceUnit,\
+ javax.persistence.PersistenceUnits,\
+ javax.ws.rs.Path,\
+ javax.xml.ws.WebServiceProvider,\
+ javax.xml.ws.WebServiceRef,\
+ javax.xml.ws.WebServiceRefs
+
+subclasses = javax.ws.rs.core.Application
+
+implementations =
Modified: openejb/trunk/maven-plugins/spi-helper-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/spi/SpiMojo.java
URL: http://svn.apache.org/viewvc/openejb/trunk/maven-plugins/spi-helper-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/spi/SpiMojo.java?rev=1291909&r1=1291908&r2=1291909&view=diff
==============================================================================
--- openejb/trunk/maven-plugins/spi-helper-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/spi/SpiMojo.java (original)
+++ openejb/trunk/maven-plugins/spi-helper-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/spi/SpiMojo.java Tue Feb 21 16:53:51 2012
@@ -2,7 +2,6 @@ package org.apache.openejb.maven.plugin.
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.DefaultArtifact;
-import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.handler.DefaultArtifactHandler;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
@@ -28,6 +27,7 @@ import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
+import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileWriter;
import java.io.StringReader;
@@ -39,11 +39,12 @@ import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
-import java.util.Arrays;
+import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Properties;
import java.util.Set;
/**
@@ -52,69 +53,7 @@ import java.util.Set;
* @phase compile
*/
public class SpiMojo extends AbstractMojo {
- private static final Map<String, Profile> DEFAULT_PROFILES = new HashMap<String, Profile>();
- private static final String DEFAULT_PROFILE = "jee6";
-
- static {
- final Profile jee6 = new Profile(
- Arrays.asList( // annotations, TODO: possibly remove some redundant annotations
- "javax.annotation.ManagedBean",
- "javax.annotation.PostConstruct",
- "javax.annotation.PreDestroy",
- "javax.annotation.Resource",
- "javax.annotation.Resources",
- "javax.annotation.security.DenyAll",
- "javax.annotation.security.PermitAll",
- "javax.annotation.security.RolesAllowed",
- "javax.annotation.sql.DataSourceDefinition",
- "javax.ejb.AfterBegin",
- "javax.ejb.AfterCompletion",
- "javax.ejb.ApplicationException",
- "javax.ejb.Asynchronous",
- "javax.ejb.BeforeCompletion",
- "javax.ejb.ConcurrencyManagement",
- "javax.ejb.DependsOn",
- "javax.ejb.EJB",
- "javax.ejb.EJBs",
- "javax.ejb.Init",
- "javax.ejb.LocalBean",
- "javax.ejb.LocalHome",
- "javax.ejb.MessageDriven",
- "javax.ejb.PostActivate",
- "javax.ejb.PrePassivate",
- "javax.ejb.RemoteHome",
- "javax.ejb.Remove",
- "javax.ejb.Schedule",
- "javax.ejb.Schedules",
- "javax.ejb.Singleton",
- "javax.ejb.Stateful",
- "javax.ejb.Stateless",
- "javax.ejb.Timeout",
- "javax.enterprise.inject.Specializes",
- "javax.interceptor.AroundInvoke",
- "javax.interceptor.AroundTimeout",
- "javax.interceptor.ExcludeClassInterceptors",
- "javax.interceptor.ExcludeDefaultInterceptors",
- "javax.interceptor.Interceptors",
- "javax.jws.WebService",
- "javax.persistence.PersistenceContext",
- "javax.persistence.PersistenceContexts",
- "javax.persistence.PersistenceUnit",
- "javax.persistence.PersistenceUnits",
- "javax.ws.rs.Path",
- "javax.xml.ws.WebServiceProvider",
- "javax.xml.ws.WebServiceRef",
- "javax.xml.ws.WebServiceRefs"
- ),
- Arrays.asList( // subclasses
- "javax.ws.rs.core.Application"
- ),
- new ArrayList<String>( // implementations
- // no implementations
- )
- );
- DEFAULT_PROFILES.put(DEFAULT_PROFILE, jee6);
- }
+ private static final String PROFILE_PATH = "org/apache/xbean/profile.properties";
/**
* @parameter default-value="${project.build.outputDirectory}"
@@ -123,13 +62,6 @@ public class SpiMojo extends AbstractMoj
private File module;
/**
- * @parameter default-value="${project.build.outputDirectory}"
- *
- * for webapps "${project.build.directory}/${project.build.finalName}" is better
- */
- private File outputFolder;
-
- /**
* @parameter default-value="${project}"
* @required
* @readonly
@@ -157,7 +89,9 @@ public class SpiMojo extends AbstractMoj
private List<String> profiles;
/**
- * @parameter expression="${spi.output}" default-value="META-INF/org/apache/xbean/scan.xml"
+ * @parameter expression="${spi.output}" default-value="${project.build.outputDirectory}/META-INF/org/apache/xbean/scan.xml"
+ *
+ * for webapp: ${project.build.directory}/${project.build.finalName}/WEB-INF/org/apache/xbean/scan.xml
*/
private String outputFilename;
@@ -194,25 +128,22 @@ public class SpiMojo extends AbstractMoj
/**
* @component
*/
- protected ArtifactFactory factory;
-
- /**
- * @component
- */
protected ArtifactResolver resolver;
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
+ final Map<String, Profile> loadedProfiles = loadProfiles();
+
//
// create profiles to use
//
final List<Profile> profileToUse = new ArrayList<Profile>();
if (profiles != null) {
for (String profile : profiles) {
- if (DEFAULT_PROFILES.containsKey(profile)) {
- profileToUse.add(DEFAULT_PROFILES.get(profile));
+ if (loadedProfiles.containsKey(profile)) {
+ profileToUse.add(loadedProfiles.get(profile));
} else {
- getLog().info("can't find profile " + profile + ", available ones are " + DEFAULT_PROFILES.keySet());
+ getLog().info("can't find profile " + profile + ", available ones are " + loadedProfiles.keySet());
}
}
}
@@ -220,8 +151,15 @@ public class SpiMojo extends AbstractMoj
profileToUse.add(new Profile(annotations, subclasses, implementations));
}
+ if (profileToUse.isEmpty() && loadedProfiles.size() > 0) {
+ final Map.Entry<String, Profile> profile = loadedProfiles.entrySet().iterator().next();
+ getLog().info("using profile " + profile.getKey());
+ profileToUse.add(profile.getValue());
+ }
+
if (profileToUse.isEmpty()) {
- profileToUse.add(DEFAULT_PROFILES.get(DEFAULT_PROFILE));
+ getLog().warn("no profile or configuration, nothing will be done");
+ return;
}
//
@@ -233,7 +171,6 @@ public class SpiMojo extends AbstractMoj
final Archive archive;
final URLClassLoader loader = createClassLoader(providedDependenciesClassLoader());
if (war && useAggregatedArchiveIfWar) {
- // no parent to avoid to not simply look lib/
archive = new ClasspathArchive(loader, loader.getURLs());
getLog().info("using an aggregated archive");
} else {
@@ -323,7 +260,7 @@ public class SpiMojo extends AbstractMoj
// dump found classes
//
- final File output = path(outputFolder, outputFilename);
+ final File output = new File(outputFilename);
if (!output.getParentFile().exists() && !output.getParentFile().mkdirs()) {
getLog().error("can't create " + output.getParent());
return;
@@ -352,12 +289,44 @@ public class SpiMojo extends AbstractMoj
}
}
- private File path(File outputFolder, String outputFilename) {
- File output = new File(outputFilename);
- if (!output.isAbsolute()) {
- output = new File(outputFolder, outputFilename);
+ private Map<String, Profile> loadProfiles() {
+ final Map<String, Profile> profiles = new HashMap<String, Profile>();
+ try {
+ final Enumeration<URL> urls = Thread.currentThread().getContextClassLoader().getResources(PROFILE_PATH);
+ while (urls.hasMoreElements()) {
+ final URL url = urls.nextElement();
+ final Properties properties = new Properties();
+ properties.load(new BufferedInputStream(url.openStream()));
+
+ final String name = properties.getProperty("name");
+ if (name == null) {
+ getLog().warn("ignoring " + url.toExternalForm() + " since it doesn't contain a name");
+ }
+
+
+ final List<String> profileAnnotations = list(properties.getProperty("annotations"));
+ final List<String> profileSubclasses = list(properties.getProperty("subclasses"));
+ final List<String> profileImplementations = list(properties.getProperty("implementations"));
+
+ profiles.put(name, new Profile(profileAnnotations, profileSubclasses, profileImplementations));
+ }
+ } catch (Exception e) {
+ getLog().warn("can't look for profiles");
+ }
+ return profiles;
+ }
+
+ private static List<String> list(final String commaSeparatedList) {
+ final List<String> list = new ArrayList<String>();
+ if (commaSeparatedList != null) {
+ for (String value : commaSeparatedList.split(",")) {
+ final String trimmed = value.trim();
+ if (!trimmed.isEmpty()) {
+ list.add(trimmed);
+ }
+ }
}
- return output;
+ return list;
}
private ClassLoader providedDependenciesClassLoader() {