如何将一批Mavenized示例转换为Eclipse理解的格式?

时间:2010-11-11 20:35:19

标签: python ruby eclipse perl maven

我正在考虑采用当前采用一种格式的一些示例(不是Mavenized - 实际上是ANT形式)并试图找到一种自动方式将它们融入Eclipse可以理解的内容中。虽然我有几年的Java和其他奇怪的语言,但用Java做这件事听起来像是用大锤来敲钉子。

我一直在研究脚本语言,如Ruby,Python,Perl等。我没有任何经验,但很乐意学习。

如何以一种格式(带有文件的目录或目录)获取示例并将其重组为近似于Eclipse项目的内容?例如,我想采用具有以下结构的树

dir my_example
  - build.xml
  - deployment.xml
  - jboss-esb-unfiltered.xml
  - log4j.xml
  - readme.txt

并将其转换为

dir1 my_example_eclipse
  - dir src
    - [empty]
  - dir esbcontent
    - dir META-INF
      - deployment.xml
      - jboss-esb-unfiltered.xml
    - log4j.xml
  - readme.txt

此外,我需要能够创建Eclipse所需的某些隐藏文件。其中一个是.project文件,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>helloworld</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
    <buildCommand>
        <name>org.eclipse.jdt.core.javabuilder</name>
        <arguments>
        </arguments>
    </buildCommand>
    <buildCommand>
        <name>org.eclipse.wst.common.project.facet.core.builder</name>
        <arguments>
        </arguments>
    </buildCommand>
    <buildCommand>
        <name>org.eclipse.wst.validation.validationbuilder</name>
        <arguments>
        </arguments>
    </buildCommand>
</buildSpec>
<natures>
    <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
    <nature>org.eclipse.jdt.core.javanature</nature>
    <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
    <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
</natures>
</projectDescription>

如何使用其中一种脚本语言创建文本文件?

提前致谢。

3 个答案:

答案 0 :(得分:5)

  

如何将一批Mavenized示例转换为Eclipse理解的格式?

Eclipse可以理解Mavenized项目。您有两种选择:

  • 使用Maven Eclipse Plugin(Maven插件)并在Mavenized示例上运行mvn eclipse:eclipse以生成.project.classpath,然后将其导入为现有项目到Eclipse中。

  • 使用m2eclipse插件(Eclipse插件)直接将现有Maven项目导入您的工作区。

两种方法都是排他性的,使用一种或另一种。如今,人们倾向于选择提供完整Maven集成的m2eclipse插件。

答案 1 :(得分:2)

在你做任何“munging”之前,我会尝试让你的maven示例先在eclipse中运行。 Eclipse有几个插件可用于处理基于maven的项目。

答案 2 :(得分:0)

这应该做你需要的(在Python中):

import os
import shutil

def maven_to_eclipse(maven_dir, eclipse_dir):
    # assumes mode of maven_dir will be the same as eclipse_dir
    new_mode = os.stat(maven_dir).st_mode
    if os.path.exists(eclipse_dir):
        # if new_dir doesn't exist
        # create it with same permissions as old_dir
        os.mkdirs(eclipse_dir, new_mode)

    # create directories under new_dir: src, ebscontent, ebscontent/META-INF
    # use os.path.join to work on multiple os 
    os.mkdir(os.path.join(eclipse_dir, 'src'), new_mode)
    os.mkdir(os.path.join(eclipse_dir, 'ebscontent'), new_mode)
    os.mkdir(os.path.join(eclipse_dir, 'ebscontent', 'META-INF'), new_mode)

    # cp old/deployment.xml new/ebsconent/META-INF/deployment.xml
    shutil.copy2(os.path.join(maven_dir, 'deployment.xml'),
        os.path.join(eclipse_dir, 'ebscontent', 'META-INF', 'deployment.xml'))

    # cp old/jboss-esb-unfiltered.xml new/ebsconent/META-INF/jboss-esb-unfiltered.xml
    shutil.copy2(os.path.join(maven_dir, 'jboss-esb-unfiltered.xml'),
        os.path.join(eclipse_dir, 'ebscontent', 'META-INF', 'jboss-esb-unfiltered.xml'))

    # cp old/log4j.xml new/ebsconent/log4j.xml
    shutil.copy2(os.path.join(maven_dir, 'log4j.xml'),
        os.path.join(eclipse_dir, 'ebscontent', 'log4j.xml'))

    # cp old/readme.txt new/readme.txt
    shutil.copy2(os.path.join(maven_dir, 'readme.txt'),
        os.path.join(eclipse_dir, 'readme.txt'))

if __name__ == '__main__':
    base_path = 'C:\\Path\\To\\Maven Dirs'
    maven_dirs = ('my_example', 'another_example', 'third_example')
    for maven_dir in maven_dirs:
        maven_to_eclipse(os.path.join(base_path, maven_dir), 
            os.path.join(base_bath, maven_dir + '_eclipse'))

这应该适用于多个操作系统。这可能写得更短,但对新手来说会更加困惑。没有试图捕获异常。例如,如果新目录已存在,os.mkdirs可能会失败。

在运行之前更改base_pathmaven_dirs