Attached as maven-fixup.py (yes, written in Python; baby steps .. baby steps ... the good news is the processing is fairly simple to gen this, so it can probably be done in maven/jelly, I just don't know how yet).
I've also attached the generated .classpath file and .project file.
Not perfect, but I'm not sure if it can be in eclipse anyway. You'll still red X's in eclipse for:
- sandbox/twiddle/src/java
- sandbox/webdav/src/java
- some of the xmlbeans stuff; this is because the gen'd classes are duplicated across multiple source folders; eclipse doesn't like this; I think source folders in eclipse can be filtered, so a smarter version of the tool could filter the dups away; but this might not work outside of eclipse, if those classes are actually required by the runtime.
I HAVE NOT VERIFIED THAT THE SERVER CAN RUN AFTER COMPILING THE CLASSES THIS WAY.
That's not my intent (yet); I just wanted to use sexy eclipse browsing to peruse the geronimo universe, without seeing compiler errors all over the place.
Other eclipse notes:
- make sure you turn on 1.4 level compiler compliance; assert is used throughout geronimo, and the default compiler settings essentially mark these as compiler errors
- you'll want to turn off warnings for unused imports, and some other things like static members accessed in a non-static fashion sort of thing. Cuts way back on the number of warnings.
- you'll want to filter referenced libraries off in the Java perspective's navigator; there are 32 source folders, and 41 referenced libraries - the list of 'things' is just annoyingly long and you can live without the referenced libraries.
-- Patrick Mueller [EMAIL PROTECTED]
#!/usr/bin/python
import os import sys import string import xml.dom import xml.dom.minidom mavenRepo = os.path.expanduser("~/.maven/repository") #-------------------------------------------------------------------- # #-------------------------------------------------------------------- def getProjectDirs(root, path, result): rootPath = "%s/%s" % (root,path) entries = os.listdir(rootPath) for entry in entries: rootPathEntry = "%s/%s" % (rootPath,entry) pathEntry = "%s/%s" % (path,entry) if (os.path.isdir(rootPathEntry)): getProjectDirs(root,pathEntry,result) continue if (entry == "project.xml"): srcJavaPath = "%s/src/java" % rootPath if (os.path.exists(srcJavaPath)): result.append(os.path.normpath(path).replace("\\","/")) #-------------------------------------------------------------------- # #-------------------------------------------------------------------- def getXmlBeansDirs(root, path, result): rootPath = "%s/%s" % (root,path) entries = os.listdir(rootPath) for entry in entries: rootPathEntry = "%s/%s" % (rootPath,entry) pathEntry = "%s/%s" % (path,entry) if (os.path.exists("%s/%s/target/xmlbeans" % (rootPath,entry))): result.append(os.path.normpath("%s/%s" % (path,entry)).replace("\\","/")) if (os.path.isdir(rootPathEntry)): getXmlBeansDirs(root,pathEntry,result) continue #-------------------------------------------------------------------- # #-------------------------------------------------------------------- def getXmlText(element,subElementName): subElements = element.getElementsByTagName(subElementName) if (len(subElements) == 0): return "" result = "" subElement = subElements[0] for child in subElement.childNodes: if (child.nodeType == xml.dom.Node.TEXT_NODE): result = result + child.data return result #-------------------------------------------------------------------- # #-------------------------------------------------------------------- def getMavenDependencies(dom,projectDir,mavenDependencies): # ~/.maven/repository/commons-logging/jars/commons-logging-1.0.3.jar # ${repo}/${groupId}/${type}s/${artifactId}-${version}.${type} # print "Dependencies for %s" % projectDir dependencyElements = dom.getElementsByTagName("dependency") for dependencyElement in dependencyElements: elementId = getXmlText(dependencyElement,"id") elementVersion = getXmlText(dependencyElement,"version") elementGroupId = getXmlText(dependencyElement,"groupId") elementArtifactId = getXmlText(dependencyElement,"artifactId") elementType = getXmlText(dependencyElement,"type") elementUrl = getXmlText(dependencyElement,"url") if (elementType == ""): elementType = "jar" # print " dependency: " # print " id: %s" % elementId # print " version: %s" % elementVersion # print " groupId: %s" % elementGroupId # print " artifactId: %s" % elementArtifactId if (elementGroupId != ""): testFile = "%s/%ss/%s-%s.%s" % (elementGroupId,elementType,elementArtifactId,elementVersion,elementType) elif (elementArtifactId != ""): testFile = "%s/%ss/%s-%s.%s" % (elementId,elementType,elementArtifactId,elementVersion,elementType) elif (-1 != elementId.find("+")): repoDir = elementId.split("+")[0] repoName = elementId.replace("+","-") testFile = "%s/%ss/%s-%s.%s" % (repoDir,elementType,repoName,elementVersion,elementType) else: testFile = "%s/%ss/%s-%s.%s" % (elementId,elementType,elementId,elementVersion,elementType) testAbsFile = "%s/%s" % (mavenRepo,testFile) if (elementVersion == "DEV"): # print "Skipping %s for %s since it's probably a subproject" % (testFile,projectDir) pass elif (os.path.exists(testAbsFile)): if (testFile not in mavenDependencies): mavenDependencies.append(testFile) else: print "Unable to find file in maven repo: %s for %s" % (testFile,projectDir) print " dependency: for %s" % projectDir print " id: %s" % elementId print " version: %s" % elementVersion print " groupId: %s" % elementGroupId print " artifactId: %s" % elementArtifactId print " url: %s" % elementUrl print #-------------------------------------------------------------------- # #-------------------------------------------------------------------- thisFile = sys.argv[0] igPath = "%s/../incubator-geronimo" % os.path.dirname(thisFile) projectDirs = [] xmlBeansDirs = [] mavenDependencies = [] projectDoms = {} getProjectDirs(igPath,".",projectDirs) getXmlBeansDirs(igPath,".",xmlBeansDirs) #print "Found the following project dirs:" #for projectDir in projectDirs: # print " %s" % projectDir #print for projectDir in projectDirs: dom = xml.dom.minidom.parse("%s/%s/project.xml" % (igPath,projectDir)) projectDoms[projectDir] = dom getMavenDependencies(dom,projectDir,mavenDependencies) classpathFileName = "%s/.classpath" % igPath print "Rewriting %s" % classpathFileName classpathFile = open(classpathFileName,"w") print >>classpathFile, '<?xml version="1.0" encoding="UTF-8"?>' print >>classpathFile, '<!-- generated by %s -->' % os.path.basename(thisFile) print >>classpathFile, '<classpath>' print >>classpathFile, ' <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>' for projectDir in projectDirs: print "Adding source folder for %s" % projectDir print >>classpathFile, ' <classpathentry kind="src" path="%s/src/java" out="%s/target/classes" />' % (projectDir,projectDir) for xmlBeansDir in xmlBeansDirs: print "Adding source folder for %s (xmlbeans)" % xmlBeansDir print >>classpathFile, ' <classpathentry kind="src" path="%s/target/xmlbeans" out="%s/target/classes" />' % (xmlBeansDir,xmlBeansDir) for mavenDependency in mavenDependencies: print "Adding jar reference for %s" % mavenDependency print >>classpathFile, ' <classpathentry kind="var" path="MAVEN_REPO/%s"/>' % mavenDependency print >>classpathFile, '</classpath>' classpathFile.close() #<?xml version="1.0" encoding="UTF-8"?> #<classpath> # <classpathentry kind="src" path="specs/ejb/src/java" out="specs/ejb/target" /> # <classpathentry kind="src" path="specs/jta/src/java" out="specs/jta/target" /> # <classpathentry kind="src" path="specs/j2ee-connector/src/java" out="specs/j2ee-connector/target" /> # <classpathentry kind="src" path="specs/j2ee-deployment/src/java" out="specs/j2ee-deployment/target" /> # <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> #</classpath> #-------------------------------------------------------------------- # #-------------------------------------------------------------------- projectFileName = "%s/.project" % igPath print "Rewriting %s" % projectFileName projectFile = open(projectFileName,"w") print >>projectFile, '<?xml version="1.0" encoding="UTF-8"?>' print >>projectFile, '<!-- generated by %s -->' % os.path.basename(thisFile) print >>projectFile, '<projectDescription>' print >>projectFile, ' <name>incubator-geronimo</name>' print >>projectFile, ' <comment></comment>' print >>projectFile, ' <projects>' print >>projectFile, ' </projects>' print >>projectFile, ' <buildSpec>' print >>projectFile, ' <buildCommand>' print >>projectFile, ' <name>org.eclipse.jdt.core.javabuilder</name>' print >>projectFile, ' <arguments>' print >>projectFile, ' </arguments>' print >>projectFile, ' </buildCommand>' print >>projectFile, ' </buildSpec>' print >>projectFile, ' <natures>' print >>projectFile, ' <nature>org.eclipse.jdt.core.javanature</nature>' print >>projectFile, ' </natures>' print >>projectFile, '</projectDescription>' projectFile.close()
<?xml version="1.0" encoding="UTF-8"?> <!-- generated by maven-fixup.py --> <classpath> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="src" path="modules/clustering/src/java" out="modules/clustering/target/classes" /> <classpathentry kind="src" path="modules/common/src/java" out="modules/common/target/classes" /> <classpathentry kind="src" path="modules/connector/src/java" out="modules/connector/target/classes" /> <classpathentry kind="src" path="modules/console-web/src/java" out="modules/console-web/target/classes" /> <classpathentry kind="src" path="modules/core/src/java" out="modules/core/target/classes" /> <classpathentry kind="src" path="modules/deployment/src/java" out="modules/deployment/target/classes" /> <classpathentry kind="src" path="modules/jetty/src/java" out="modules/jetty/target/classes" /> <classpathentry kind="src" path="modules/kernel/src/java" out="modules/kernel/target/classes" /> <classpathentry kind="src" path="modules/maven-xmlbeans-plugin/src/java" out="modules/maven-xmlbeans-plugin/target/classes" /> <classpathentry kind="src" path="modules/remoting/src/java" out="modules/remoting/target/classes" /> <classpathentry kind="src" path="modules/security/src/java" out="modules/security/target/classes" /> <classpathentry kind="src" path="modules/transaction/src/java" out="modules/transaction/target/classes" /> <classpathentry kind="src" path="sandbox/activation/src/java" out="sandbox/activation/target/classes" /> <classpathentry kind="src" path="sandbox/explorer/src/java" out="sandbox/explorer/target/classes" /> <classpathentry kind="src" path="sandbox/javamail/src/java" out="sandbox/javamail/target/classes" /> <classpathentry kind="src" path="sandbox/mail/src/java" out="sandbox/mail/target/classes" /> <classpathentry kind="src" path="sandbox/twiddle/src/java" out="sandbox/twiddle/target/classes" /> <classpathentry kind="src" path="sandbox/webdav/src/java" out="sandbox/webdav/target/classes" /> <classpathentry kind="src" path="specs/ejb/src/java" out="specs/ejb/target/classes" /> <classpathentry kind="src" path="specs/j2ee-connector/src/java" out="specs/j2ee-connector/target/classes" /> <classpathentry kind="src" path="specs/j2ee-deployment/src/java" out="specs/j2ee-deployment/target/classes" /> <classpathentry kind="src" path="specs/j2ee-jacc/src/java" out="specs/j2ee-jacc/target/classes" /> <classpathentry kind="src" path="specs/j2ee-management/src/java" out="specs/j2ee-management/target/classes" /> <classpathentry kind="src" path="specs/jms/src/java" out="specs/jms/target/classes" /> <classpathentry kind="src" path="specs/jsp/src/java" out="specs/jsp/target/classes" /> <classpathentry kind="src" path="specs/jta/src/java" out="specs/jta/target/classes" /> <classpathentry kind="src" path="specs/servlet/src/java" out="specs/servlet/target/classes" /> <classpathentry kind="src" path="modules/connector/target/xmlbeans" out="modules/connector/target/classes" /> <classpathentry kind="src" path="modules/deployment/target/xmlbeans" out="modules/deployment/target/classes" /> <classpathentry kind="src" path="modules/jetty/target/xmlbeans" out="modules/jetty/target/classes" /> <classpathentry kind="src" path="modules/security/target/xmlbeans" out="modules/security/target/classes" /> <classpathentry kind="src" path="specs/schema/target/xmlbeans" out="specs/schema/target/classes" /> <classpathentry kind="var" path="MAVEN_REPO/commons-logging/jars/commons-logging-1.0.3.jar"/> <classpathentry kind="var" path="MAVEN_REPO/mx4j/jars/mx4j-SNAPSHOT.jar"/> <classpathentry kind="var" path="MAVEN_REPO/commons-lang/jars/commons-lang-SNAPSHOT.jar"/> <classpathentry kind="var" path="MAVEN_REPO/commons-collections/jars/commons-collections-SNAPSHOT.jar"/> <classpathentry kind="var" path="MAVEN_REPO/commons-jexl/jars/commons-jexl-SNAPSHOT.jar"/> <classpathentry kind="var" path="MAVEN_REPO/log4j/jars/log4j-1.2.8.jar"/> <classpathentry kind="var" path="MAVEN_REPO/mx4j/jars/mx4j-jmx-SNAPSHOT.jar"/> <classpathentry kind="var" path="MAVEN_REPO/xmlbeans/jars/xbean-apache-1.0-DEV.jar"/> <classpathentry kind="var" path="MAVEN_REPO/cglib/jars/cglib-full-2.0-RC2.jar"/> <classpathentry kind="var" path="MAVEN_REPO/concurrent/jars/concurrent-1.3.2.jar"/> <classpathentry kind="var" path="MAVEN_REPO/regexp/jars/regexp-1.3-dev.jar"/> <classpathentry kind="var" path="MAVEN_REPO/commons-jxpath/jars/commons-jxpath-1.1.jar"/> <classpathentry kind="var" path="MAVEN_REPO/xerces/jars/xercesImpl-2.6.0.jar"/> <classpathentry kind="var" path="MAVEN_REPO/xml-apis/jars/xml-apis-1.0.b2.jar"/> <classpathentry kind="var" path="MAVEN_REPO/dom4j/jars/dom4j-1.4.jar"/> <classpathentry kind="var" path="MAVEN_REPO/xml-commons-resolver/jars/xml-commons-resolver-1.1.jar"/> <classpathentry kind="var" path="MAVEN_REPO/commons-cli/jars/commons-cli-1.0.jar"/> <classpathentry kind="var" path="MAVEN_REPO/jetty/jars/org.mortbay.jetty-5.0.beta0.jar"/> <classpathentry kind="var" path="MAVEN_REPO/tomcat/jars/jasper-compiler-5.0.16.jar"/> <classpathentry kind="var" path="MAVEN_REPO/tomcat/jars/jasper-runtime-5.0.16.jar"/> <classpathentry kind="var" path="MAVEN_REPO/commons-el/jars/commons-el-1.0.jar"/> <classpathentry kind="var" path="MAVEN_REPO/ant/jars/ant-1.5.jar"/> <classpathentry kind="var" path="MAVEN_REPO/xerces/jars/xmlParserAPIs-2.2.1.jar"/> <classpathentry kind="var" path="MAVEN_REPO/hsqldb/jars/hsqldb-1.7.1.jar"/> <classpathentry kind="var" path="MAVEN_REPO/groovy/jars/groovy-1.0-alpha-1.jar"/> <classpathentry kind="var" path="MAVEN_REPO/asm/jars/asm-1.3.4.jar"/> <classpathentry kind="var" path="MAVEN_REPO/asm/jars/asm-util-1.3.4.jar"/> <classpathentry kind="var" path="MAVEN_REPO/classworlds/jars/classworlds-SNAPSHOT.jar"/> <classpathentry kind="var" path="MAVEN_REPO/castor/jars/castor-0.9.5.jar"/> <classpathentry kind="var" path="MAVEN_REPO/commons-beanutils/jars/commons-beanutils-SNAPSHOT.jar"/> <classpathentry kind="var" path="MAVEN_REPO/jetty/jars/jetty-SNAPSHOT.jar"/> <classpathentry kind="var" path="MAVEN_REPO/tomcat/jars/catalina-5.0.16.jar"/> <classpathentry kind="var" path="MAVEN_REPO/tomcat/jars/catalina-optional-5.0.16.jar"/> <classpathentry kind="var" path="MAVEN_REPO/tomcat/jars/naming-common-5.0.16.jar"/> <classpathentry kind="var" path="MAVEN_REPO/tomcat/jars/naming-resources-5.0.16.jar"/> <classpathentry kind="var" path="MAVEN_REPO/tomcat/jars/servlets-common-5.0.16.jar"/> <classpathentry kind="var" path="MAVEN_REPO/tomcat/jars/servlets-default-5.0.16.jar"/> <classpathentry kind="var" path="MAVEN_REPO/tomcat/jars/servlets-webdav-5.0.16.jar"/> <classpathentry kind="var" path="MAVEN_REPO/tomcat/jars/tomcat-util-5.0.16.jar"/> <classpathentry kind="var" path="MAVEN_REPO/mockobjects/jars/mockobjects-jdk1.4-j2ee1.3-0.09.jar"/> <classpathentry kind="var" path="MAVEN_REPO/mockobjects/jars/mockobjects-core-0.09.jar"/> </classpath>
<?xml version="1.0" encoding="UTF-8"?> <!-- generated by maven-fixup.py --> <projectDescription> <name>incubator-geronimo</name> <comment></comment> <projects> </projects> <buildSpec> <buildCommand> <name>org.eclipse.jdt.core.javabuilder</name> <arguments> </arguments> </buildCommand> </buildSpec> <natures> <nature>org.eclipse.jdt.core.javanature</nature> </natures> </projectDescription>