On Thursday, February 12, 2004, at 01:35 PM, Patrick Mueller wrote:
I've got a little .classpath (and .project) fixer-upper for the incubator-geronimo project if you happen to want to suck it into eclipse.
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.
they aren't, and this is a problem in idea also. I need to figure out how to manipulate the xmlbeans plugin's classpath so the duplicates don't get generated in the first place.
david jencks
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,elementTyp e)
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
#-------------------------------------------------------------------- # #--------------------------------------------------------------------
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>