2009-07-06 26 views
6

से एक विशिष्ट ग्रहण प्रोजेक्ट खोलें, मैं कई छोटी, लेकिन असंबंधित जावा परियोजनाओं के साथ काम करता हूं। मैंने एक चींटी स्क्रिप्ट बनाई जो आवश्यक पुस्तकालयों और प्रोजेक्ट नाम के साथ, जब भी मैं एक नई परियोजना बना देता हूं, स्वचालित रूप से .project और .classpath बनाता है। मैं कमांड लाइन से उस प्रोजेक्ट के साथ एक्लिप्स खोलने में सक्षम होना चाहता हूं। वर्कस्पेस में पुरानी खुली परियोजना को बंद करके, मैं इसे मैन्युअल रूप से करता हूं, फिर मैं एक आयात करता हूं और नई परियोजना ढूंढता हूं। मुझे एंट या बैच से ऐसा करने का कोई तरीका नहीं मिला। मैं ग्रहण खोल सकता हूं, लेकिन यह अंतिम कार्यक्षेत्र/परियोजना के साथ आता है। मुझे कोई फर्क नहीं पड़ता कि मुझे एक व्यक्तिगत वर्स्पस्पेस/प्रोजेक्ट बनाना होगा, लेकिन मुझे नहीं पता कि स्क्रिप्ट से ऐसा कैसे किया जाए। किसी भी सुझाव के लिए आपका धन्यवाद।कमांड लाइन

उत्तर

7

मैं यह कर के खिलाफ की सिफारिश करेंगे के रूप में यह वास्तव में है कि बहुत प्रयास नहीं है मानक जादूगरों का उपयोग कर परियोजना आयात करें। मैं निष्क्रिय परियोजनाओं को बंद करने पर ध्यान केंद्रित करूंगा (नीचे और देखें)।

संपादित करें: यदि आप कार्यक्षेत्र में परियोजनाओं को लाने के लिए चींटी का उपयोग करने पर मृत सेट हैं, तो आप नीचे दिए गए कोड की तरह कुछ प्लगइन लागू कर सकते हैं।

क्या आप पुरानी परियोजनाओं को बंद करते हैं या उन्हें हटाते हैं? मुझे वास्तव में उन्हें हटाने का कोई कारण नहीं दिखता है। यदि आप उन सभी परियोजनाओं को बंद करते हैं जिन पर आप काम नहीं कर रहे हैं (उन पर राइट क्लिक करें और प्रोजेक्ट का चयन करें या जिस परियोजना को आप चाहते हैं उसका चयन करें और राइट क्लिक करें-> असंबद्ध परियोजनाओं को बंद करें), उन्हें प्लेटफॉर्म द्वारा अनदेखा किया जाता है, जिससे विकास पर असर नहीं पड़ेगा खुली परियोजना।

देखने से बंद परियोजनाओं छुपाने के लिए, आप नीचे की ओर पैकेज एक्सप्लोरर देखने के ऊपरी दाएं कोने में ओर त्रिकोण क्लिक कर सकते हैं, फ़िल्टर ... का चयन करें और में तत्वों से बाहर करने के लिए चयन करें दृश्य: सूची बंद परियोजनाओं विकल्प की जांच करें।


यह है कि कार्यक्षेत्र जड़ में एक फ़ाइल से नाम का एक सेट पढ़ा जाएगा, (सामग्री को हटाए बिना) सभी मौजूदा परियोजनाओं हटा सकते हैं और कार्यक्षेत्र में नई परियोजनाओं को बनाने के लिए एक प्लगइन है। उपयोग अपने जोखिम पर है, कोई देयता ब्ला ब्लाह नहीं है।

सामग्री लें और उन्हें प्रासंगिक फाइलों में रखें और आप एक ग्रहण प्लगइन पैकेज कर सकते हैं। मैं एक अलग ग्रहण स्थापित का उपयोग करने की अनुशंसा करता हूं (वास्तव में मैं इसका उपयोग करने के खिलाफ अनुशंसा करता हूं) क्योंकि यह कार्यक्षेत्र रूट में newprojects.txt को हर बार चलाएगा।

प्लगइन.एक्सएमएल में घोषणा एक ग्रहण विस्तार बिंदु लागू करता है जिसे वर्कबेंच प्रारंभ करने के बाद बुलाया जाता है। StartupHelper की प्रारंभिक स्टार्टअप() विधि को कॉल किया जाता है। यह एक नया रननेबल बनाता है जिसे अतुल्यकालिक रूप से निष्पादित किया जाता है (इसका अर्थ यह है कि यदि इस प्लगइन में समस्याएं हैं तो वर्कस्पेस लोडिंग ब्लॉक नहीं होगी)। रननेबल जादू newprojects.txt फ़ाइल से लाइनें पढ़ता है जो वर्कस्पेस रूट में देखने की अपेक्षा करता है। यदि यह कोई सामग्री पाता है तो यह परियोजनाओं को हटा देगा/बना देगा।

अद्यतन: सहायक के लिए परियोजनाओं कार्यक्षेत्र के बाहर बनाया जाना है, अगर आप एक मूल्य newprojects.txt में यह है कि इस परियोजना के पूर्ण यूआरआई माना जाता है परिभाषित अनुमति देने के लिए संशोधित किया गया है। ध्यान दें कि यह स्ट्रिंग से बच नहीं है, इसलिए यदि आप विंडोज प्लेटफॉर्म पर हैं, तो पथ पर डबल स्लेश का उपयोग करें।

उदाहरण सामग्री:

#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/मुख्य/जावा/नाम/विक्रेता/अमीर/projectloader/StartupHelper जावा:

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, संसाधन) उत्पन्न करते हैं। फिर हम इसे जार में ट्विक और संकलित करते हैं। कभी-कभी हमें ग्रहण में डीबग करने की आवश्यकता होती है, जिस बिंदु पर हम मैन्युअल रूप से एक प्रोजेक्ट बनाते हैं और स्रोत, रेज और पुस्तकालय आयात करते हैं। मैंने अब यह प्रक्रिया स्वचालित कर दी है, और मैं नव निर्मित परियोजना के साथ ग्रहण खोलकर कोड पीढ़ी को समाप्त करना चाहता हूं। पुरानी परियोजनाएं फेंक दी जाती हैं (बंद/हटाई जाती हैं)। – alex

+0

मैं चींटी का उपयोग करने पर मृत-सेट नहीं हूं, बैच (विन प्लेटफॉर्म) सहित कुछ भी चला जाता है। – alex

+0

यह एक हैक का थोड़ा सा है लेकिन आप एक प्लगइन को परिभाषित कर सकते हैं जो ग्रहण स्टार्टअप पर "नई" परियोजना के लिए एक प्रसिद्ध फ़ाइल की जांच करता है। IStartup इंटरफ़ेस को कार्यान्वित करके प्रारंभिक स्टार्टअप() विधि को कॉल किया जाएगा और आप ऊपर के रूप में प्रोजेक्ट बना सकते हैं। अगर मुझे कुछ समय मिलता है तो मैं एक और विस्तृत प्रतिक्रिया –

0

आंशिक समाधान: एक निर्धारित कार्यक्षेत्र में खोलें ग्रहण:

eclipse.exe डाटा c: \ कोड \ कार्यक्षेत्र नाम

+0

जैसा कि बताया गया है, मैं पहले से ही ऐसा कर सकता हूं, लेकिन यह बहुत मदद नहीं है। मुझे अभी भी पिछली परियोजना को बंद करना होगा और नया खोलने के लिए आयात के माध्यम से जाना होगा। – alex

5

एक और possible optionthis 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} 

यहाँ चाल है कि यह किसी भी परियोजना, न केवल सी परियोजनाओं आयात कर सकते हैं।