You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@gump.apache.org by bo...@apache.org on 2007/09/03 22:01:46 UTC

svn commit: r572412 - /gump/trunk/python/gump/core/build/mvn.py

Author: bodewig
Date: Mon Sep  3 13:01:46 2007
New Revision: 572412

URL: http://svn.apache.org/viewvc?rev=572412&view=rev
Log:
Make each mvn build use a local repository of its own

Modified:
    gump/trunk/python/gump/core/build/mvn.py

Modified: gump/trunk/python/gump/core/build/mvn.py
URL: http://svn.apache.org/viewvc/gump/trunk/python/gump/core/build/mvn.py?rev=572412&r1=572411&r2=572412&view=diff
==============================================================================
--- gump/trunk/python/gump/core/build/mvn.py (original)
+++ gump/trunk/python/gump/core/build/mvn.py Mon Sep  3 13:01:46 2007
@@ -27,6 +27,7 @@
 """
 
 import os.path
+import shutil
 import sys
 
 from gump import log
@@ -66,6 +67,8 @@
                 
         log.debug('Run Maven2 on Project: #[' + `project.getPosition()` + '] ' + project.getName())
         
+        self.performPreBuild(project, languageHelper, stats)
+
         if project.okToPerformWork():
 
             #
@@ -94,10 +97,20 @@
                     
         if project.wasBuilt():
             pomFile=self.locateMavenProjectFile(project) 
-            if os.path.exists(pomFile):                               
+            if os.path.exists(pomFile):                      
                 project.addDebug('Maven POM in: ' + pomFile) 
-                catFileToFileHolder(project, pomFile, FILE_TYPE_CONFIG) 
-  
+                catFileToFileHolder(project, pomFile, FILE_TYPE_CONFIG)
+
+            localRepo = self.locateLocalRepo(project)
+            if os.path.exists(localRepo):
+                project.addInfo("Removing local repository %s" % (localRepo))
+                try:
+                    shutil.rmtree(localRepo, True)
+                except (IOError, os.error), why:
+                    project.addWarning("Error removing [%s] - %s."
+                                       % (localRepo, why))
+ 
+
     #
     # Build an Maven command for this project
     #        
@@ -125,22 +138,6 @@
         cmd=Cmd('mvn','build_'+project.getModule().getName()+'_'+project.getName(),\
             basedir,{'CLASSPATH':classpath})
             
-        # Set this as a system property. Setting it here helps JDK1.4+
-        # AWT implementations cope w/o an X11 server running (e.g. on
-        # Linux)
-        # cmd.addPrefixedParameter('-D','java.awt.headless','true','=')
-    
-        #
-        # Add BOOTCLASSPATH
-        #
-        #if bootclasspath:
-        #    cmd.addPrefixedParameter('-X','bootclasspath/p',bootclasspath,':')
-            
-        #if jvmargs:
-        #    cmd.addParameters(jvmargs)
-            
-        # cmd.addParameter('org.apache.maven.cli.App')  
-    
         #
         # Allow maven-level debugging...
         #
@@ -166,6 +163,9 @@
         #
         #cmd.addPrefixedParameter('-D','build.sysclasspath','only','=')
     
+        cmd.addParameter('--settings')
+        cmd.addParameter(self.locateMvnSettings(project))
+
         # End with the goal...
         if goal: 
             for goalParam in goal.split(','):
@@ -185,7 +185,84 @@
         basedir = project.mvn.getBaseDirectory() or project.getBaseDirectory()
         return os.path.abspath(os.path.join(basedir,'pom.xml'))  
         
+    # Do this even if not ok
+    def performPreBuild(self, project, languageHelper, stats):
+                   
+        # Maven requires a build.properties to be generated...
+        if project.okToPerformWork():
+            try:
+                settingsFile = self.generateMvnSettings(project,languageHelper)
+                project.addDebug('(Gump generated) Maven2 Settings in: ' + settingsFile)
+                
+                try:
+                    catFileToFileHolder(project, settingsFile,
+                        FILE_TYPE_CONFIG,
+                        os.path.basename(settingsFile))
+                except:
+                    log.error('Display Settings [ ' + settingsFile + '] Failed', exc_info=1)   
+               
+            except Exception, details:
+                message='Generate Maven2 Settings Failed:' + str(details)
+                log.error(message, exc_info=1)
+                project.addError(message)
+                project.changeState(STATE_FAILED, REASON_PREBUILD_FAILED)
+
     def preview(self,project,languageHelper,stats):        
         command=self.getMavenCommand(project,languageHelper) 
         command.dump()
             
+    def generateMvnSettings(self, project, languageHelper):
+        """Set repository for a Maven2 project"""
+        
+        settingsFile = self.locateMvnSettings(project)
+        # Ensure containing directory exists, or make it.
+        settingsdir = os.path.dirname(settingsFile)
+        if not os.path.exists(settingsdir):
+            project.addInfo('Making directory for Maven2 settings: ['+settingsdir+']')
+            os.makedirs(settingsdir)
+        
+        if os.path.exists(settingsFile):
+            project.addWarning('Overriding Maven2 settings: ['+settingsFile+']')
+    
+        
+        props=open(settingsFile,'w')
+        
+        props.write(("""<?xml version="1.0"?>
+<!--
+# DO NOT EDIT  DO NOT EDIT  DO NOT EDIT  DO NOT EDIT  DO NOT EDIT  DO NOT EDIT  DO NOT EDIT 
+#
+# File Automatically Generated by Gump, see http://gump.apache.org/
+#
+# Generated For : %s
+# Generated At  : %s
+#
+#
+# DO NOT EDIT  DO NOT EDIT  DO NOT EDIT  DO NOT EDIT  DO NOT EDIT  DO NOT EDIT  DO NOT EDIT
+-->
+<settings>
+  <localRepository>%s</localRepository>
+  <!--mirrors>
+    <mirror>
+      <id>Gump</id>
+      <name>Gump</name>
+      <url>http://localhost:8192/maven2</url>
+      <mirrorOf>central</mirrorOf>
+    </mirror>
+  </mirrors-->
+</settings>""")	% (project.getName(), time.strftime('%Y-%m-%d %H:%M:%S'),
+                   self.locateLocalRepo(project)) )
+        return settingsFile
+
+    def locateMvnSettings(self, project):
+        #
+        # Where to put this:
+        #
+        basedir = project.mvn.getBaseDirectory() or project.getBaseDirectory()
+        return os.path.abspath(os.path.join(basedir, 'gump_mvn_settings.xml'))
+
+    def locateLocalRepo(self, project):
+        #
+        # Where to put the local repository
+        #
+        return os.path.abspath(os.path.join(self.run.getWorkspace().getBaseDirectory(),
+                                            project.getName() + ".mvnlocalrepo"))



Re: svn commit: r572412 - /gump/trunk/python/gump/core/build/mvn.py

Posted by Leo Simons <ma...@leosimons.com>.
On Sep 3, 2007, at 10:01 PM, bodewig@apache.org wrote:
> Author: bodewig
> Date: Mon Sep  3 13:01:46 2007
> New Revision: 572412
>
> URL: http://svn.apache.org/viewvc?rev=572412&view=rev
> Log:
> Make each mvn build use a local repository of its own

really? Wow! That's a lot of extra downloading. What problem does  
this solve?

cheers,

Leo Simons
--
http://www.leosimons.com/blog/



---------------------------------------------------------------------
To unsubscribe, e-mail: general-unsubscribe@gump.apache.org
For additional commands, e-mail: general-help@gump.apache.org