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]