tree bae6ee2495fc7e42c7fef15fd8e81062eca76143
parent 2ced6bdd4fdec5faa8864fda4c3c6596c2055c4a
author Igor Fedorenko <igor@ifedorenko.com> 1371548297 +0400
committer Igor Fedorenko <igor@ifedorenko.com> 1371548297 +0400

396554 changed packaging to use Orbit org.apache.velocity

sadly, this completely broke archetyper integration, so more
work will have to be done before this can be merged to master

DEBUG: Sisu - Initialize: org.codehaus.plexus.velocity.DefaultVelocityComponent@61631478
[INFO] Setting property: classpath.resource.loader.class => 'org.codehaus.plexus.velocity.ContextClassLoaderResourceLoader'.
[INFO] Setting property: velocimacro.messages.on => 'false'.
[INFO] Setting property: resource.loader => 'classpath'.
[INFO] Setting property: resource.manager.logwhenfound => 'false'.
[ERROR] Problem instantiating the template loader.
Look at your properties file and make sure the
name of the template loader is correct. Here is the
error:
[ERROR] java.lang.ClassNotFoundException: org.codehaus.plexus.velocity.ContextClassLoaderResourceLoader cannot be found by org.apache.velocity_1.5.0.v200905192330
	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:188)
	at org.apache.velocity.util.ClassUtils.getClass(ClassUtils.java:76)
	at org.apache.velocity.util.ClassUtils.getNewInstance(ClassUtils.java:95)
	at org.apache.velocity.runtime.resource.loader.ResourceLoaderFactory.getLoader(ResourceLoaderFactory.java:48)
	at org.apache.velocity.runtime.resource.ResourceManagerImpl.initialize(ResourceManagerImpl.java:134)
	at org.apache.velocity.runtime.RuntimeInstance.initializeResourceManager(RuntimeInstance.java:594)
	at org.apache.velocity.runtime.RuntimeInstance.init(RuntimeInstance.java:241)
	at org.apache.velocity.app.VelocityEngine.init(VelocityEngine.java:116)
	at org.codehaus.plexus.velocity.DefaultVelocityComponent.initialize(DefaultVelocityComponent.java:79)
	at org.sonatype.guice.plexus.lifecycles.PlexusLifecycleManager.initialize(PlexusLifecycleManager.java:338)
	at org.sonatype.guice.plexus.lifecycles.PlexusLifecycleManager.manageLifecycle(PlexusLifecycleManager.java:296)
	at org.sonatype.guice.plexus.lifecycles.PlexusLifecycleManager.onProvision(PlexusLifecycleManager.java:148)
	at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:108)
	at com.google.inject.internal.ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:55)
	at com.google.inject.internal.ProviderInternalFactory.circularGet(ProviderInternalFactory.java:68)
	at com.google.inject.internal.InternalFactoryToInitializableAdapter.get(InternalFactoryToInitializableAdapter.java:45)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1018)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
	at com.google.inject.Scopes$1$1.get(Scopes.java:59)
	at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
	at com.google.inject.internal.InjectorImpl$3$1.call(InjectorImpl.java:965)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1011)
	at com.google.inject.internal.InjectorImpl$3.get(InjectorImpl.java:961)
	at org.sonatype.guice.bean.locators.LazyBeanEntry.getValue(LazyBeanEntry.java:83)
	at org.sonatype.guice.plexus.locators.LazyPlexusBean.getValue(LazyPlexusBean.java:49)
	at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:253)
	at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:245)
	at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:239)
	at org.eclipse.m2e.core.internal.MavenPluginActivator.lookup(MavenPluginActivator.java:357)
	at org.eclipse.m2e.core.internal.MavenPluginActivator.getArchetype(MavenPluginActivator.java:393)
	at org.eclipse.m2e.core.internal.archetype.ArchetypeCatalogFactory.getArchetyper(ArchetypeCatalogFactory.java:71)
	at org.eclipse.m2e.core.internal.archetype.ArchetypeCatalogFactory$InternalCatalogFactory.getArchetypeCatalog(ArchetypeCatalogFactory.java:108)
	at org.eclipse.m2e.core.ui.internal.wizards.MavenProjectWizardArchetypePage.getAllArchetypes(MavenProjectWizardArchetypePage.java:541)
	at org.eclipse.m2e.core.ui.internal.wizards.MavenProjectWizardArchetypePage.getArchetypesForCatalog(MavenProjectWizardArchetypePage.java:516)
	at org.eclipse.m2e.core.ui.internal.wizards.MavenProjectWizardArchetypePage$15.run(MavenProjectWizardArchetypePage.java:557)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)

Signed-off-by: Igor Fedorenko <igor@ifedorenko.com>
