mirror of https://github.com/apache/maven.git
o adding IT it0094
git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@465867 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
fcbc0a3f9c
commit
a7e210270f
|
@ -0,0 +1,65 @@
|
||||||
|
<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/maven-v4_0_0.xsd">
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>mojo</artifactId>
|
||||||
|
<version>5</version>
|
||||||
|
</parent>
|
||||||
|
<groupId>org.apache.maven.it</groupId>
|
||||||
|
<artifactId>maven-core-it0094-mojo</artifactId>
|
||||||
|
<packaging>maven-plugin</packaging>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.maven</groupId>
|
||||||
|
<artifactId>maven-plugin-api</artifactId>
|
||||||
|
<version>2.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.maven</groupId>
|
||||||
|
<artifactId>maven-model</artifactId>
|
||||||
|
<version>2.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>log4j</groupId>
|
||||||
|
<artifactId>log4j</artifactId>
|
||||||
|
<version>[1.2.9,]</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.codehaus.plexus</groupId>
|
||||||
|
<artifactId>plexus-utils</artifactId>
|
||||||
|
<version>1.0.5</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>xalan</groupId>
|
||||||
|
<artifactId>xalan</artifactId>
|
||||||
|
<version>2.5.1</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>xerces</groupId>
|
||||||
|
<artifactId>xercesImpl</artifactId>
|
||||||
|
<version>2.5.0</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>xml-apis</groupId>
|
||||||
|
<artifactId>xml-apis</artifactId>
|
||||||
|
<version>2.0.0</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<reporting>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-plugin-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</reporting>
|
||||||
|
</project>
|
|
@ -0,0 +1,173 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2005-2006 Brian Fox (brianefox@gmail.com)
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.codehaus.mojo.kodo;
|
||||||
|
|
||||||
|
import org.apache.maven.plugin.AbstractMojo;
|
||||||
|
import org.apache.maven.plugin.MojoExecutionException;
|
||||||
|
import org.apache.xerces.jaxp.SAXParserFactoryImpl;
|
||||||
|
import org.codehaus.classworlds.ClassRealm;
|
||||||
|
|
||||||
|
import javax.xml.parsers.SAXParserFactory;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.net.URLClassLoader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Goal that enhances persistant classes
|
||||||
|
*
|
||||||
|
* @requiresDependancyResolution test
|
||||||
|
* @goal enhance
|
||||||
|
* @phase compile
|
||||||
|
*/
|
||||||
|
public class Enhance
|
||||||
|
extends AbstractMojo
|
||||||
|
|
||||||
|
{
|
||||||
|
public Enhance()
|
||||||
|
{
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void execute()
|
||||||
|
throws MojoExecutionException
|
||||||
|
{
|
||||||
|
printClassPath();
|
||||||
|
|
||||||
|
ClassLoader originalLoader = Thread.currentThread().getContextClassLoader();
|
||||||
|
System.out.println( originalLoader.getClass() );
|
||||||
|
|
||||||
|
setupClassloader();
|
||||||
|
originalLoader = Thread.currentThread().getContextClassLoader();
|
||||||
|
System.out.println( originalLoader.getClass() );
|
||||||
|
|
||||||
|
SAXParserFactoryImpl spi = new SAXParserFactoryImpl();
|
||||||
|
SAXParserFactory spf = SAXParserFactory.newInstance();
|
||||||
|
this.getLog().info( spf.toString() );
|
||||||
|
String t = "org/apache/xerces/jaxp/SAXParserFactoryImpl.class";
|
||||||
|
this.getLog().info( t );
|
||||||
|
URL url = originalLoader.getResource( t );
|
||||||
|
//URL url = spf.getClass().getClassLoader().getResource("javax/xml/parsers/SAXParserFactory.class");
|
||||||
|
this.getLog().info( "Loaded from: " + url.toString() );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds nessessary items to the classloader.
|
||||||
|
*
|
||||||
|
* @return ClassLoader original Classloader.
|
||||||
|
* @throws MojoExecutionException
|
||||||
|
*/
|
||||||
|
public ClassLoader setupClassloader()
|
||||||
|
throws MojoExecutionException
|
||||||
|
{
|
||||||
|
|
||||||
|
URLClassLoader loader = null;
|
||||||
|
ClassLoader originalLoader = Thread.currentThread().getContextClassLoader();
|
||||||
|
this.getLog().info( "orig classloader:" );
|
||||||
|
printURLClassPath( Thread.currentThread().getContextClassLoader(), "" );
|
||||||
|
URL[] urls = new URL[0];
|
||||||
|
loader = new URLClassLoader( urls, originalLoader );
|
||||||
|
|
||||||
|
Thread.currentThread().setContextClassLoader( loader );
|
||||||
|
this.getLog().info( "new classloader:" );
|
||||||
|
printURLClassPath( Thread.currentThread().getContextClassLoader(), "" );
|
||||||
|
return originalLoader;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void printURLClassPath( ClassLoader sysClassLoader, String s )
|
||||||
|
throws MojoExecutionException
|
||||||
|
{
|
||||||
|
//Get the Classloader
|
||||||
|
//Get the URLs
|
||||||
|
URL[] urls;
|
||||||
|
if ( sysClassLoader instanceof URLClassLoader )
|
||||||
|
{
|
||||||
|
urls = ( (URLClassLoader) sysClassLoader ).getURLs();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Field f = sysClassLoader.getClass().getDeclaredField( "realm" );
|
||||||
|
f.setAccessible( true );
|
||||||
|
ClassRealm r = (ClassRealm) f.get( sysClassLoader );
|
||||||
|
urls = r.getConstituents();
|
||||||
|
}
|
||||||
|
catch ( NoSuchFieldException e )
|
||||||
|
{
|
||||||
|
throw new MojoExecutionException( "mee ", e );
|
||||||
|
}
|
||||||
|
catch ( IllegalAccessException e )
|
||||||
|
{
|
||||||
|
throw new MojoExecutionException( "mee ", e );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for ( int i = 0; i < urls.length; i++ )
|
||||||
|
{
|
||||||
|
this.getLog().info( s + urls[i].getFile() );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( sysClassLoader.getParent() != null )
|
||||||
|
{
|
||||||
|
printURLClassPath( sysClassLoader.getParent(), s + " " );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void printClassPath()
|
||||||
|
{
|
||||||
|
ClassLoader sysClassLoader = Thread.currentThread().getContextClassLoader();
|
||||||
|
URL[] urls = null;
|
||||||
|
Field field;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
|
||||||
|
field = sysClassLoader.getClass().getDeclaredField( "realm" );
|
||||||
|
field.setAccessible( true );
|
||||||
|
ClassRealm realm = (ClassRealm) field.get( sysClassLoader );
|
||||||
|
|
||||||
|
urls = realm.getConstituents();
|
||||||
|
}
|
||||||
|
catch ( SecurityException e )
|
||||||
|
{
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
catch ( NoSuchFieldException e )
|
||||||
|
{
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
catch ( IllegalArgumentException e )
|
||||||
|
{
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
catch ( IllegalAccessException e )
|
||||||
|
{
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
//URL[] urls = ( (URLClassLoader) sysClassLoader ).getURLs();
|
||||||
|
this.getLog().info( "Initial Classpath:" );
|
||||||
|
for ( int i = 0; i < urls.length; i++ )
|
||||||
|
{
|
||||||
|
this.getLog().info( urls[i].getFile() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
<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/maven-v4_0_0.xsd">
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>org.apache.maven.it</groupId>
|
||||||
|
<artifactId>maven-core-it0094</artifactId>
|
||||||
|
<description>Test classloading issues with mojos after 2.0 (MNG-1898).</description>
|
||||||
|
<packaging>pom</packaging>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
|
||||||
|
<modules>
|
||||||
|
<module>mojo</module>
|
||||||
|
<module>test</module>
|
||||||
|
</modules>
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,33 @@
|
||||||
|
<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/maven-v4_0_0.xsd">
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.apache.maven.it</groupId>
|
||||||
|
<artifactId>maven-core-it0094</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
<artifactId>maven-core-it0094-test</artifactId>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.it</groupId>
|
||||||
|
<artifactId>maven-core-it0094-mojo</artifactId>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>process-classes</id>
|
||||||
|
<phase>process-classes</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>enhance</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
Loading…
Reference in New Issue