<groupId>jp.sourceforge.stigmata</groupId>\r
<artifactId>digger</artifactId>\r
<packaging>jar</packaging>\r
- <version>1.1.1-SNAPSHOT</version>\r
+ <version>3.0.0-SNAPSHOT</version>\r
<name>digger</name>\r
<description>Dig up class files</description>\r
<url>http://stigmata.sourceforge.jp/digger/</url>\r
<dependencies>\r
<dependency>\r
<groupId>asm</groupId>\r
- <artifactId>asm-all</artifactId>\r
- <version>3.1</version>\r
+ <artifactId>asm</artifactId>\r
+ <version>3.3</version>\r
<scope>compile</scope>\r
</dependency>\r
<dependency>\r
<groupId>junit</groupId>\r
<artifactId>junit</artifactId>\r
- <version>4.3</version>\r
+ <version>4.8</version>\r
<scope>test</scope>\r
</dependency>\r
</dependencies>\r
</repository>\r
<site>\r
<id>shell.sourceforge.jp</id>\r
- <url>scp://tama3@shell.sourceforge.jp/home/groups/s/st/stigmata/digger/htdocs</url>\r
+ <url>scp://tama3@shell.sourceforge.jp/home/groups/s/st/stigmata/htdocs/digger</url>\r
</site>\r
</distributionManagement>\r
\r
<plugin>\r
<groupId>org.apache.maven.plugins</groupId>\r
<artifactId>maven-compiler-plugin</artifactId>\r
+ <version>2.3.2</version>\r
<configuration>\r
<source>1.6</source>\r
<target>1.6</target>\r
</configuration>\r
</plugin>\r
\r
+ <plugin>\r
+ <groupId>org.apache.maven.plugins</groupId>\r
+ <artifactId>maven-resources-plugin</artifactId>\r
+ <version>2.4.3</version>\r
+ <configuration>\r
+ <encoding>utf-8</encoding>\r
+ </configuration>\r
+ </plugin>\r
+\r
<!-- for JUnit4 -->\r
<plugin>\r
<artifactId>maven-surefire-plugin</artifactId>\r
<plugin>\r
<groupId>org.apache.maven.plugins</groupId>\r
<artifactId>maven-site-plugin</artifactId>\r
+ <version>3.0-beta-3</version>\r
<configuration>\r
<inputEncoding>utf-8</inputEncoding>\r
<outputEncoding>utf-8</outputEncoding>\r
</plugin>\r
\r
<plugin>\r
- <groupId>org.apache.maven.plugins</groupId>\r
- <artifactId>maven-javadoc-plugin</artifactId>\r
- <configuration>\r
- <charset>utf-8</charset>\r
- <docencoding>utf-8</docencoding>\r
- <locale>en</locale>\r
- </configuration>\r
- </plugin>\r
-\r
- <plugin>\r
<artifactId>maven-release-plugin</artifactId>\r
<configuration>\r
<tagBase>svn+ssh://tama3@svn.sourceforge.jp/svnroot/stigmata/digger/tags</tagBase>\r
<plugin>\r
<groupId>org.apache.maven.plugins</groupId>\r
<artifactId>maven-project-info-reports-plugin</artifactId>\r
- </plugin>\r
- <plugin>\r
- <groupId>org.apache.maven.plugins</groupId>\r
- <artifactId>maven-javadoc-plugin</artifactId>\r
- <configuration>\r
- <locale>en</locale>\r
- </configuration>\r
+ <version>2.3.1</version>\r
</plugin>\r
<plugin>\r
<groupId>org.codehaus.mojo</groupId>\r
<artifactId>cobertura-maven-plugin</artifactId>\r
+ <version>2.4</version>\r
+ <configuration>\r
+ <formats>\r
+ <format>xml</format>\r
+ <format>html</format>\r
+ </formats>\r
+ <encoding>utf-8</encoding>\r
+ </configuration>\r
</plugin>\r
<plugin>\r
+ <groupId>org.apache.maven.plugins</groupId>\r
<artifactId>maven-pmd-plugin</artifactId>\r
+ <version>2.5</version>\r
<configuration>\r
- <linkXref>true</linkXref>\r
<sourceEncoding>utf-8</sourceEncoding>\r
+ <outputEncoding>utf-8</outputEncoding>\r
<targetJdk>1.6</targetJdk>\r
</configuration>\r
</plugin>\r
<plugin>\r
+ <groupId>org.codehaus.mojo</groupId>\r
+ <artifactId>findbugs-maven-plugin</artifactId>\r
+ <version>2.3.2</version>\r
+ <configuration>\r
+ <sourceEncoding>utf-8</sourceEncoding>\r
+ <outputEncoding>utf-8</outputEncoding>\r
+ </configuration>\r
+ </plugin>\r
+ <plugin>\r
<groupId>org.apache.maven.plugins</groupId>\r
- <artifactId>maven-jxr-plugin</artifactId>\r
+ <artifactId>maven-surefire-report-plugin</artifactId>\r
+ <version>2.8</version>\r
</plugin>\r
<plugin>\r
<groupId>org.apache.maven.plugins</groupId>\r
- <artifactId>maven-changes-plugin</artifactId>\r
- <reportSets>\r
- <reportSet>\r
- <reports>\r
- <report>changes-report</report>\r
- </reports>\r
- </reportSet>\r
- </reportSets>\r
+ <artifactId>maven-jxr-plugin</artifactId>\r
+ <version>2.1</version>\r
+ <configuration>\r
+ <inputEncoding>utf-8</inputEncoding>\r
+ <outputEncoding>utf-8</outputEncoding>\r
+ <aggregate>true</aggregate>\r
+ </configuration>\r
</plugin>\r
<plugin>\r
- <groupId>org.codehaus.mojo</groupId>\r
- <artifactId>findbugs-maven-plugin</artifactId>\r
+ <groupId>org.apache.maven.plugins</groupId>\r
+ <artifactId>maven-javadoc-plugin</artifactId>\r
+ <version>2.7</version>\r
<configuration>\r
- <xmlOutput>false</xmlOutput>\r
- <threshold>Normal</threshold>\r
- <effort>Default</effort>\r
+ <charset>utf-8</charset>\r
+ <encoding>utf-8</encoding>\r
+ <docencoding>utf-8</docencoding>\r
</configuration>\r
</plugin>\r
</plugins>\r
package jp.sourceforge.stigmata.digger;
-/*
- * $Id$
- */
-
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
* and the set of a class file included in the archive.
*
* @author Haruaki TAMADA
- * @version $Revision$
*/
public interface ClassFileArchive extends Iterable<ClassFileEntry>{
/**
package jp.sourceforge.stigmata.digger;
-/*
- * $Id$
- */
-
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
* This class manages class name and its location.
*
* @author Haruaki TAMADA
- * @version $Revision$
*/
public class ClassFileEntry{
private URL location;
package jp.sourceforge.stigmata.digger;
-/*
- * $Id$
- */
-
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
* Context object of Classpath.
*
* @author Haruaki TAMADA
- * @version $Revision$
*/
public class ClasspathContext implements Iterable<URL>{
private ClasspathContext parent;
package jp.sourceforge.stigmata.digger;
-/*
- * $Id$
- */
-
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Iterator;
import java.util.List;
+import org.objectweb.asm.AnnotationVisitor;
+import org.objectweb.asm.Attribute;
import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.commons.EmptyVisitor;
+import org.objectweb.asm.ClassVisitor;
+import org.objectweb.asm.FieldVisitor;
+import org.objectweb.asm.MethodVisitor;
/**
*
*
*
* @author Haruaki TAMADA
- * @version $Revision$
*/
public class DefaultClassFileArchive implements ClassFileArchive{
private File file;
}
}
- private static class ClassNameExtractVisitor extends EmptyVisitor{
+ private static class ClassNameExtractVisitor implements ClassVisitor{
private String className;
public String getClassName(){
String superClassName, String[] interfaces){
className = name;
}
+
+ @Override
+ public AnnotationVisitor visitAnnotation(String arg0, boolean arg1){
+ return null;
+ }
+
+ @Override
+ public void visitAttribute(Attribute arg0){
+ }
+
+ @Override
+ public void visitEnd(){
+ }
+
+ @Override
+ public FieldVisitor visitField(int arg0, String arg1, String arg2,
+ String arg3, Object arg4){
+ return null;
+ }
+
+ @Override
+ public void visitInnerClass(String arg0, String arg1, String arg2,
+ int arg3){
+ }
+
+ @Override
+ public MethodVisitor visitMethod(int arg0, String arg1, String arg2,
+ String arg3, String[] arg4){
+ return null;
+ }
+
+ @Override
+ public void visitOuterClass(String arg0, String arg1, String arg2){
+ }
+
+ @Override
+ public void visitSource(String arg0, String arg1){
+
+ }
}
}
package jp.sourceforge.stigmata.digger;
-/*
- * $Id$
- */
-
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
/**
*
* @author Haruaki TAMADA
- * @version $Revision$
*/
public class JarClassFileArchive implements ClassFileArchive{
private File file;
package jp.sourceforge.stigmata.digger;
-/*
- * $Id$
- */
-
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
*
*
* @author Haruaki TAMADA
- * @version $Revision$
*/
public class WarClassFileArchive extends JarClassFileArchive{
public WarClassFileArchive(String jarfile) throws IOException{
package jp.sourceforge.stigmata.digger.util;
-/*
- * $Id$
- */
-
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
* Then, this class loader can load classes included in a plain jar file and a war file.
*
* @author Haruaki Tamada
- * @version $Revision$
*/
public class WarClassLoader extends URLClassLoader{
public WarClassLoader(URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory){
if(url.toString().endsWith(".war")){
try{
URL newurl = new URL("jar:" + url + "!/" + path);
- InputStream in = newurl.openStream();
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- byte[] data = new byte[256];
- int read = 0;
- while((read = in.read(data, 0, data.length)) != -1){
- out.write(data, 0, read);
+ InputStream in = null;
+ ByteArrayOutputStream out = null;
+ byte[] classdata = null;
+ try{
+ in = newurl.openStream();
+ out = new ByteArrayOutputStream();
+ byte[] data = new byte[256];
+ int read = 0;
+ while((read = in.read(data, 0, data.length)) != -1){
+ out.write(data, 0, read);
+ }
+ classdata = out.toByteArray();
+ } finally{
+ if(in != null){
+ in.close();
+ }
+ if(out != null){
+ out.close();
+ }
}
- byte[] classdata = out.toByteArray();
- in.close();
- out.close();
-
+
clazz = defineClass(name, classdata, 0, classdata.length);
break;
} catch(IOException exp){
* @version $Revision$
*/
public class ClasspathContextTest{
+ private static final String ASM_FILE = "target/asm-3.3.jar";
private ClasspathContext context;
@Before
public void testParent() throws Exception{
ClasspathContext subContext = new ClasspathContext(context);
context.addClasspath(new File("target/classes").toURI().toURL());
- subContext.addClasspath(new File("target/asm-all-3.1.jar").toURI().toURL());
+ subContext.addClasspath(new File(ASM_FILE).toURI().toURL());
Assert.assertEquals(1, context.getClasspathSize());
Assert.assertEquals(2, subContext.getClasspathSize());
URL[] url = subContext.getClasspathList();
Assert.assertEquals(new File("target/classes").toURI().toURL(), url[0]);
- Assert.assertEquals(new File("target/asm-all-3.1.jar").toURI().toURL(), url[1]);
+ Assert.assertEquals(new File(ASM_FILE).toURI().toURL(), url[1]);
subContext.clear();
Assert.assertEquals(1, subContext.getClasspathSize());
public void testParent2() throws Exception{
ClasspathContext subContext = new ClasspathContext(context);
context.addClasspath(new File("target/classes").toURI().toURL());
- subContext.addClasspath(new File("target/asm-all-3.1.jar").toURI().toURL());
+ subContext.addClasspath(new File(ASM_FILE).toURI().toURL());
Assert.assertTrue(context.isIncludeSystemClasses());
subContext.setIncludeSystemClasses(false);
@Test
public void testFindEntryNotSearchSystemClasspath4() throws Exception{
context.addClasspath(new File("target/classes").toURI().toURL());
- context.addClasspath(new File("target/asm-all-3.1.jar").toURI().toURL());
+ context.addClasspath(new File(ASM_FILE).toURI().toURL());
context.setIncludeSystemClasses(false);
Assert.assertTrue(context.hasEntry("java.lang.Object"));
@Test
public void testNotSearchSystemClasspath4() throws Exception{
context.addClasspath(new File("target/classes").toURI().toURL());
- context.addClasspath(new File("target/asm-all-3.1.jar").toURI().toURL());
+ context.addClasspath(new File(ASM_FILE).toURI().toURL());
context.setIncludeSystemClasses(false);
Assert.assertNotNull(context.findClass("java.lang.Object"));
Assert.assertNotNull(context.findClass("jp.sourceforge.stigmata.digger.ClasspathContext"));
@Test
public void testSubContextNotSearchSystemClasspath4() throws Exception{
context.addClasspath(new File("target/classes").toURI().toURL());
- context.addClasspath(new File("target/asm-all-3.1.jar").toURI().toURL());
+ context.addClasspath(new File(ASM_FILE).toURI().toURL());
context.setIncludeSystemClasses(false);
ClasspathContext subContext = new ClasspathContext(context);
Assert.assertNotNull(subContext.findClass("jp.sourceforge.stigmata.digger.ClasspathContext"));
Assert.assertNotNull(subContext.findClass("org.objectweb.asm.ClassReader"));
}
+
+ @Test
+ public void testWarLoader() throws Exception{
+ context.addClasspath(new File("target/test-classes/resources/samplewar.war").toURI().toURL());
+
+ Assert.assertNotNull(context.findClass("HelloWorld"));
+
+ ClasspathContext subContext = new ClasspathContext(context);
+ Assert.assertNotNull(subContext.findClass("HelloWorld"));
+ }
}
--- /dev/null
+public class HelloWorld{
+ public static void main(String[] args){
+ System.out.println("Hello World");
+ }
+}