2009-07-06 13 views
6

私は多くの小さな、しかし無関係なJavaプロジェクトを扱います。私は必要なライブラリとプロジェクト名で新しいプロジェクトを作成するたびに、.projectと.classpathを自動的に作成するAntスクリプトを作成しました。私はコマンドラインからそのプロジェクトでEclipseを開くことができるようにしたいと思います。今私は手動で、ワークスペースで古い開いているプロジェクトを閉じて、それから私はインポートを行い、新しいプロジェクトを見つける。私はAntまたはバッチのいずれかからこれを行う方法を見つけることができませんでした。 Eclipseを開くことができますが、最後のワークスペース/プロジェクトが表示されます。私は個々の宇宙空間/プロジェクトを作成しなければならないかどうか心配していませんが、スクリプトからその方法を知ることはできません。ご意見ありがとうございます。コマンドラインから特定のEclipseプロジェクトを開きます。

答えて

7

それは本当にへの多くの努力ではないように私はこれを行うことに対して推薦します標準ウィザードを使用してプロジェクトをインポートします。私は、非アクティブなプロジェクトを閉じることに焦点を当てます(下記参照)。

編集:antを使用してプロジェクトをワークスペースに持ってこなかったら、以下のコードのようなプラグインを実装できます。

古いプロジェクトを閉じたり削除したりしますか?実際に削除する理由はありません。あなたが作業していないすべてのプロジェクトを閉じて(それらを右クリックしてプロジェクトを閉じるか選択し、必要なプロジェクトを選択して右クリック→関連のないプロジェクトを閉じる)、それらはプラットフォームによって無視されます。開いているプロジェクト。ビューから、閉じたプロジェクトを非表示にするには

、あなたは、パッケージエクスプローラビューの右上隅にある三角形を指して下向きをクリックしフィルタ...を選択し、中から除外する要素を選択することができますビュー:リストチェッククローズドプロジェクトオプション。


これは、ワークスペースのルートにあるファイルから名前のセットを読んで(内容を削除せずに)すべての既存のプロジェクトを削除して、ワークスペースに新しいプロジェクトを作成しますプラグインです。使用はあなた自身の責任で行われ、責任は一切ありません。

内容を取り出して関連ファイルに入れて、Eclipseプラグインをパッケージ化することができます。ワークスペースのルートにnewprojects.txtが見つかるたびに実行されるので、別のEclipseインストールを使用することをお勧めします(実際には使用しないことをお勧めします)。

plugin.xmlの宣言では、ワークベンチの初期化後に呼び出されるEclipse拡張ポイントが実装されています。 StartupHelperのearlyStartup()メソッドが呼び出されます。非同期に実行される新しいRunnableを作成します(これは、このプラグインに問題がある場合、ワークスペースの読み込みがブロックされないことを意味します)。 Runnableは、作業領域のルートに表示されると予想されるmagic newprojects.txtファイルから行を読み込みます。内容を見つけたら、プロジェクトを削除/作成します。

更新: ヘルパーは、あなたがnewprojects.txtに値を定義した場合、プロジェクトの絶対URIであると仮定され、プロジェクトがワークスペース外に作成することを可能にするように変更されました。それは文字列をエスケープしないので、あなたがWindowsプラットフォーム上にいる場合は、パス上に二重スラッシュを使用してください。

例の内容:

#will be created in the workspace 
project1 
#will be created at c:\test\project2 
project2=c:\\test\project2 

幸運!

/META-INF/MANIFEST.MF:

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: Project fettling Plug-in 
Bundle-SymbolicName: name.seller.rich;singleton:=true 
Bundle-Version: 1.0.0 
Bundle-Activator: name.seller.rich.Activator 
Require-Bundle: org.eclipse.core.runtime, 
org.eclipse.ui.workbench;bundle-version="3.4.1", 
org.eclipse.swt;bundle-version="3.4.1", 
org.eclipse.core.resources;bundle-version="3.4.1" 
Bundle-ActivationPolicy: lazy 

/plugin.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<?eclipse version="3.0"?> 
<plugin> 
    <extension 
     point="org.eclipse.ui.startup"> 
     <startup class="name.seller.rich.projectloader.StartupHelper"/>      
    </extension> 
</plugin> 

/.project:

<?xml version="1.0" encoding="UTF-8"?> 
<projectDescription> 
    <name>name.seller.rich.projectloader</name> 
    <comment></comment> 
    <projects> 
    </projects> 
    <buildSpec> 
     <buildCommand> 
      <name>org.eclipse.jdt.core.javabuilder</name> 
      <arguments> 
      </arguments> 
     </buildCommand> 
     <buildCommand> 
      <name>org.eclipse.pde.ManifestBuilder</name> 
      <arguments> 
      </arguments> 
     </buildCommand> 
     <buildCommand> 
      <name>org.eclipse.pde.SchemaBuilder</name> 
      <arguments> 
      </arguments> 
     </buildCommand> 
    </buildSpec> 
    <natures> 
     <nature>org.eclipse.pde.PluginNature</nature> 
     <nature>org.eclipse.jdt.core.javanature</nature> 
    </natures> 
</projectDescription> 

/.classpath:

<?xml version="1.0" encoding="UTF-8"?> 
<classpath> 
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> 
    <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> 
    <classpathentry kind="src" path="src/main/java"/> 
    <classpathentry kind="output" path="target/classes"/> 
</classpath> 

/src/main/java/name/seller/rich/Activator.java:

package name.seller.rich; 

import org.eclipse.core.runtime.Plugin; 
import org.osgi.framework.BundleContext; 

/** 
* The activator class controls the plug-in life cycle 
*/ 
public class Activator extends Plugin { 

    // The plug-in ID 
    public static final String PLUGIN_ID = "name.seller.rich"; 

    // The shared instance 
    private static Activator plugin; 

    /** 
    * Returns the shared instance 
    * 
    * @return the shared instance 
    */ 
    public static Activator getDefault() { 
     return plugin; 
    } 

    /** 
    * The constructor 
    */ 
    public Activator() { 
    } 

    @Override 
    public void start(final BundleContext context) throws Exception { 
     super.start(context); 
     plugin = this; 
    } 

    @Override 
    public void stop(final BundleContext context) throws Exception { 
     plugin = null; 
     super.stop(context); 
    } 

} 

/srcに/メイン/ javaの/名前/販売者/リッチ/​​ projectloader/StartupHelperの.java:

package name.seller.rich.projectloader; 

import java.io.File; 
import java.io.FileInputStream; 
import java.util.Map; 
import java.util.Properties; 

import name.seller.rich.Activator; 

import org.eclipse.core.internal.resources.ProjectDescription; 
import org.eclipse.core.resources.IProject; 
import org.eclipse.core.resources.IWorkspaceRoot; 
import org.eclipse.core.resources.ResourcesPlugin; 
import org.eclipse.core.runtime.IPath; 
import org.eclipse.core.runtime.IProgressMonitor; 
import org.eclipse.core.runtime.IStatus; 
import org.eclipse.core.runtime.NullProgressMonitor; 
import org.eclipse.core.runtime.Path; 
import org.eclipse.core.runtime.Status; 
import org.eclipse.ui.IStartup; 
import org.eclipse.ui.IWorkbench; 
import org.eclipse.ui.PlatformUI; 

public class StartupHelper implements IStartup { 

    private static final class DirtyHookRunnable implements Runnable { 
     private IWorkspaceRoot workspaceRoot; 

     private DirtyHookRunnable(final IWorkspaceRoot workspaceRoot) { 
      this.workspaceRoot = workspaceRoot; 
     } 

     public void run() { 

      try { 
       IPath workspaceLocation = this.workspaceRoot.getLocation(); 

       File startupFile = new File(workspaceLocation.toOSString(), 
         "newprojects.txt"); 

       IProgressMonitor monitor = new NullProgressMonitor(); 

       Properties properties = new Properties(); 
       if (startupFile.exists()) { 
        properties.load(new FileInputStream(startupFile)); 
       } 
       if (properties.size() > 0) { 
        // delete existing projects 
        IProject[] projects = this.workspaceRoot.getProjects(); 

        for (IProject project : projects) { 
         // don't delete the content 
         project.delete(false, true, monitor); 
        } 

        // create new projects 
        for (Map.Entry entry : properties.entrySet()) { 
         IProject project = this.workspaceRoot 
           .getProject((String) entry.getKey()); 

         // insert into loop 
         ProjectDescription projectDescription = new ProjectDescription(); 
         projectDescription.setName((String) entry.getKey()); 

         String location = (String) entry.getValue(); 

         // value will be empty String if no "=" on the line 
         // in that case it will be created in the workspace 
         // WARNING, currently windows paths must be escaped, 
         // e.g. c:\\test\\myproject 
         if (location.length() > 0) { 
          IPath locationPath = new Path(location); 
          projectDescription.setLocation(locationPath); 
         } 

         project.create(projectDescription, monitor); 

         // project.create(monitor); 
         project.open(monitor); 
        } 
       } 
      } catch (Exception e) { 
       IStatus status = new Status(IStatus.INFO, Activator.PLUGIN_ID, 
         0, "unable to load new projects", null); 
       Activator.getDefault().getLog().log(status); 
      } 
     } 
    } 

    public StartupHelper() { 
     super(); 
    } 

    public final void earlyStartup() { 

     IWorkbench workbench = PlatformUI.getWorkbench(); 
     IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot(); 

     workbench.getDisplay().asyncExec(new DirtyHookRunnable(workspaceRoot)); 
    } 
} 
+0

まずはお返事ありがとうございます。これは興味深いものですが、私はそれを見ていきますが、ちょっと外に見えるかもしれません。私のセットアップに関するもう少しの言葉: "マスタ"コードベースからの前処理を通じてJavaプロジェクト(.java、resources)を生成します。その後、私たちはそれを微調整して瓶にコンパイルします。時折、Eclipseでデバッグする必要があります。その時点で、手動でプロジェクトを作成し、ソース、resおよびライブラリをインポートします。このプロセスを自動化しました。新しく作成したプロジェクトでEclipseを開いてコード生成を終了したいと思います。古いプロジェクトは捨て去り(クローズ/削除)。 – alex

+0

私はAntを使用して死んでいるわけではありませんが、バッチ(Winプラットフォーム)を含む何かが行きます。 – alex

+0

これはちょっとしたハックですが、Eclipseの起動時によく使われるファイルをチェックするプラグインを定義することができます。 IStartupインターフェイスを実装することによってearlyStartup()メソッドが呼び出され、上記のようにプロジェクトを作成できます。私はしばらく時間があれば、より詳細な応答をまとめます。 –

0

部分的な解決策:指定したワークスペースで開く日食:

eclipse.exeを-data C:\コード\ワークスペース名

+0

すでに述べたように、私はすでにそれを行うことができますが、あまり役に立ちません。私はまだ前のプロジェクトを閉じて、新しいものを開くためにインポートする必要があります。 – alex

5

possible optionは、this questionに記載されています。答えの本質はあなたがCDTをインストールしている場合は、あなたが行うことができ、次のとおりです。

eclipse -nosplash 
    -application org.eclipse.cdt.managedbuilder.core.headlessbuild 
    -import  {[uri:/]/path/to/project} 
    -importAll {[uri:/]/path/to/projectTreeURI} Import all projects under URI 
    -build  {project_name | all} 
    -cleanBuild {projec_name | all} 

ここのトリックは、それがどのプロジェクト、Cのプロジェクトだけでなくインポートすることができるということです。

関連する問題