Author: niclas
Date: Sat May 22 11:38:57 2004
New Revision: 20219

Modified:
   avalon/trunk/tools/magic/artifact/src/dist/build.bsh
   avalon/trunk/tools/magic/artifact/src/dist/build.properties
   
avalon/trunk/tools/magic/engine/src/java/org/apache/merlin/magic/Artifact.java
   avalon/trunk/tools/magic/engine/src/java/org/apache/merlin/magic/Builder.java
   avalon/trunk/tools/magic/jar/src/dist/build.bsh
   avalon/trunk/tools/magic/jar/src/dist/build.properties
   avalon/trunk/tools/magic/java/src/dist/build.bsh
Log:
Now I can build jar files with dependencies.  avalon-framework-api builds in 
4.6 secs on my system.

Modified: avalon/trunk/tools/magic/artifact/src/dist/build.bsh
==============================================================================
--- avalon/trunk/tools/magic/artifact/src/dist/build.bsh        (original)
+++ avalon/trunk/tools/magic/artifact/src/dist/build.bsh        Sat May 22 
11:38:57 2004
@@ -1,8 +1,11 @@
 
 import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
+import java.io.BufferedReader;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileOutputStream;
+import java.io.FileReader;
 import java.io.InputStream;
 import java.io.IOException;
 
@@ -13,6 +16,7 @@
 
 import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.Properties;
 
 import org.apache.merlin.magic.AbstractPlugin;
 import org.apache.merlin.magic.Artifact;
@@ -23,6 +27,86 @@
 
 public class ArtifactPlugin extends AbstractPlugin
 {
+    public Artifact locate( String artifactId )
+        throws IOException
+    {
+        File definitionsDir = new File( m_Context.getProjectSystemDir(), 
"definitions" );
+        File file = new File( definitionsDir, artifactId );
+        FileInputStream fis = new FileInputStream( file );
+        Properties p = new Properties();
+        try
+        {
+            p.load( fis );
+        } finally
+        {
+            if( fis != null )
+                fis.close();
+        }
+        String repository = p.getProperty( "artifact.repository" );
+        if( repository == null )
+            repository = m_Context.getProperty( "artifact.repository" );
+
+        String groupId = p.getProperty( "artifact.group" );
+        if( groupId == null )
+            groupId = artifactId;
+
+        String version = p.getProperty( "artifact.version" );
+        if( version == null )
+            version = "1.0.dev-0";
+
+        String type = p.getProperty( "artifact.type" );
+        if( type == null )
+            type = "jar";
+
+        Artifact artifact = new Artifact( artifactId, groupId, version, type, 
repository );
+        System.out.println( "Artifact: " + artifact );
+        return artifact;
+    }
+    
+    
+    public Artifact[] getDependencies( Artifact artifact )
+        throws IOException
+    {
+        File definitionsDir = new File( m_Context.getProjectSystemDir(), 
"dependencies" );
+        File file = new File( definitionsDir, artifact.getArtifactId() );
+        if( ! file.exists() )
+            return new Artifact[0];
+        FileReader reader = null;
+        BufferedReader br = null;
+        ArrayList deps = new ArrayList();
+        try
+        {
+            reader = new FileReader( file );
+            br = new BufferedReader( reader );
+            String line;
+            while( ( line = br.readLine() ) != null )
+            {
+                line = line.trim();
+                if( ! line.equals( "" ) )
+                    deps.add( line );
+            }
+        } catch( IOException e )
+        {
+            e.printStackTrace();
+            throw e;
+        } finally
+        {
+            if( reader != null )
+                reader.close();
+            if( br != null )
+                br.close();
+        }
+        Artifact[] result = new Artifact[ deps.size() ];
+        Iterator list = deps.iterator();
+        for( int i=0 ; list.hasNext() ; i++ )
+        {
+            String dep = (String) list.next();
+            result[i] = locate( dep );
+        }
+        return result;
+    }
+    
+    
     public ClassLoader getClassloader( Artifact[] artifacts )
         throws IOException
     {
@@ -47,15 +131,22 @@
         Path result = new Path( m_Project );
         for( int i=0 ; i < artifacts.length ; i++ )
         {
+            System.out.print( artifacts[i] );
             File localFile = toLocalFile( artifacts[i] );
             if( ! localFile.exists() )
             {
+                System.out.println( "    NOT exists." );
                 localFile.getParentFile().mkdirs();
                 download( artifacts[i], localFile );
             }
+            else
+            {
+                System.out.println( "    exists." );
+            }
             Path.PathElement pe = result.createPathElement();
             pe.setLocation( localFile );
         }
+        System.out.println( "Dep Classpath: " + result );
         return result;
     }
     

Modified: avalon/trunk/tools/magic/artifact/src/dist/build.properties
==============================================================================
--- avalon/trunk/tools/magic/artifact/src/dist/build.properties (original)
+++ avalon/trunk/tools/magic/artifact/src/dist/build.properties Sat May 22 
11:38:57 2004
@@ -1,2 +1,4 @@
 
-artifact.local.repository.dir = ${user.dir}/.maven/repository
\ No newline at end of file
+artifact.local.repository.dir = ${user.home}/.maven/repository
+
+artifact.repository = http://www.ibiblio.org/maven

Modified: 
avalon/trunk/tools/magic/engine/src/java/org/apache/merlin/magic/Artifact.java
==============================================================================
--- 
avalon/trunk/tools/magic/engine/src/java/org/apache/merlin/magic/Artifact.java  
    (original)
+++ 
avalon/trunk/tools/magic/engine/src/java/org/apache/merlin/magic/Artifact.java  
    Sat May 22 11:38:57 2004
@@ -1,7 +1,6 @@
 
 package org.apache.merlin.magic;
 
-
 public class Artifact
 {
     private static final String DEFAULT_REPOSITORY = 
"http://www.ibiblio.org/maven";;
@@ -59,5 +58,15 @@
     public String getVersion()
     {
         return m_Version;
-    }    
+    }   
+    
+    public String toString()
+    {
+        return m_Repository + "/" + m_GroupId + "/" + m_Type + "s/" + 
m_ArtifactId + "-" + m_Version + "." + m_Type;
+    } 
+    
+    public String getFilename()
+    {
+        return m_ArtifactId + "-" + m_Version + "." + m_Type;
+    }
 } 

Modified: 
avalon/trunk/tools/magic/engine/src/java/org/apache/merlin/magic/Builder.java
==============================================================================
--- 
avalon/trunk/tools/magic/engine/src/java/org/apache/merlin/magic/Builder.java   
    (original)
+++ 
avalon/trunk/tools/magic/engine/src/java/org/apache/merlin/magic/Builder.java   
    Sat May 22 11:38:57 2004
@@ -118,6 +118,9 @@
         props.put( "magic.repository.dir", new File( m_SystemDir, "repository" 
).toString() );
         props.put( "magic.project.dir", m_ProjectDir.getAbsolutePath() );
         props.put( "magic.temp.dir", m_TempDir.getAbsolutePath() );
+        props.put( "user.home", System.getProperty( "user.home" ) );
+        props.put( "java.home", System.getProperty( "java.home" ) );
+        props.put( "java.version", System.getProperty( "java.version" ) );
     }
     
     private void loadMagicSystemProperties( PluginProperties props )

Modified: avalon/trunk/tools/magic/jar/src/dist/build.bsh
==============================================================================
--- avalon/trunk/tools/magic/jar/src/dist/build.bsh     (original)
+++ avalon/trunk/tools/magic/jar/src/dist/build.bsh     Sat May 22 11:38:57 2004
@@ -1,10 +1,12 @@
 
 import java.io.File;
+import java.io.IOException;
 
 import java.util.ArrayList;
 import java.util.Iterator;
 
 import org.apache.merlin.magic.AbstractPlugin;
+import org.apache.merlin.magic.Artifact;
 import org.apache.merlin.magic.Plugin;
 import org.apache.merlin.magic.PluginContext;
 
@@ -23,6 +25,7 @@
 {
     private Object m_JavaPlugin;
     private Object m_PreparePlugin;
+    private Object m_ArtifactPlugin;
     private boolean m_Jarred = false;
         
     public void service( ServiceManager man )
@@ -30,9 +33,11 @@
     {
         m_JavaPlugin = man.lookup( "java" );
         m_PreparePlugin = man.lookup( "prepare" );
+        m_ArtifactPlugin = man.lookup( "artifact" );
     }
     
     public void jar()
+        throws IOException
     {   
         if( m_Jarred )
             return;
@@ -74,11 +79,17 @@
     }
         
     private void createJar( File manifest )
+        throws IOException
     {
-        String jarFilename = m_Context.getProperty( "jar.filename" );
-        File jarFile = new File( jarFilename ); 
-        File destDir = jarFile.getParentFile(); 
+        String projectname = m_Context.getProjectName();
+        ArtifactPlugin ap = (ArtifactPlugin) m_ArtifactPlugin;
+        Artifact thisArtifact = ap.locate( projectname );
+        
+        String dest = m_Context.getProperty( "jar.build.dest.dir" );
+        File destDir = new File( dest );
+        File jarFile = new File( dest, thisArtifact.getFilename() );
         destDir.mkdirs();
+        
         File fromDir = new File( m_Context.getProperty( "jar.build.src.dir" ) 
);
 
         Jar jar = (Jar) m_Project.createTask( "jar" );

Modified: avalon/trunk/tools/magic/jar/src/dist/build.properties
==============================================================================
--- avalon/trunk/tools/magic/jar/src/dist/build.properties      (original)
+++ avalon/trunk/tools/magic/jar/src/dist/build.properties      Sat May 22 
11:38:57 2004
@@ -1,7 +1,7 @@
 
 jar.build.src.dir = ${prepare.dest.dir}/classes
 
-jar.filename = ${jar.build.src.dir}/../${project.name}-${project.version}.jar
+jar.build.dest.dir = ${prepare.dest.dir}
 
 jar.manifest = ${prepare.src.dir}/etc/manifest.MF
 

Modified: avalon/trunk/tools/magic/java/src/dist/build.bsh
==============================================================================
--- avalon/trunk/tools/magic/java/src/dist/build.bsh    (original)
+++ avalon/trunk/tools/magic/java/src/dist/build.bsh    Sat May 22 11:38:57 2004
@@ -1,10 +1,12 @@
 
 import java.io.File;
+import java.io.IOException;
 
 import java.util.ArrayList;
 import java.util.Iterator;
 
 import org.apache.merlin.magic.AbstractPlugin;
+import org.apache.merlin.magic.Artifact;
 import org.apache.merlin.magic.Plugin;
 import org.apache.merlin.magic.PluginContext;
 
@@ -24,15 +26,18 @@
     implements Serviceable
 {
     private Object m_PreparePlugin;
+    private Object m_ArtifactPlugin;
     private boolean m_Compiled = false;
         
     public void service( ServiceManager man )
         throws ServiceException
     {
         m_PreparePlugin = man.lookup( "prepare" );
+        m_ArtifactPlugin = man.lookup( "artifact" );
     }
     
     public void compile()
+        throws IOException
     {   
         if( m_Compiled )
             return;
@@ -46,6 +51,7 @@
     }
     
     private void executeCompile()
+        throws IOException
     {
         Logger logger = getLogger();
         if( logger.isDebugEnabled() )
@@ -70,7 +76,15 @@
         Path cp = javac.createClasspath();
         Path.PathElement pe = cp.createPathElement();
         pe.setPath( classpath );
-        /* Later; also add dependency Jars */
+
+        ArtifactPlugin ap = ((ArtifactPlugin) m_ArtifactPlugin);
+        String projectname = m_Context.getProjectName();
+        Artifact thisArtifact = ap.locate( projectname );
+        Artifact[] deps = ap.getDependencies( thisArtifact );
+        Path depPath = ap.getClassPath( deps );
+        cp.add( depPath );
+        
+        System.out.println( cp.toString() );        
         
         /* Add the source path */
         Path src = javac.createSrc();

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to