2012-07-02 9 views
17

के माध्यम से एक्लिप्स वर्कस्पेस में जावा (एंड्रॉइड) परियोजनाओं का स्वचालित आयात कमांडलाइन के माध्यम से एक ग्रहण कार्यक्षेत्र में आयात परियोजनाओं को स्वचालित करने की कोशिश कर रहा है (बैश स्क्रिप्ट का उपयोग करके)। मैंने गैर-सी/सी ++ परियोजनाओं के लिए सीडीटी हेडलेस बिल्ड का उपयोग करने का सुझाव देने वाली कई पोस्ट देखी हैं, लेकिन मैं सीडीटी डाउनलोड करने से बचना चाहता हूं क्योंकि मेरी परियोजनाएं सभी जावा/एंड्रॉइड प्रोजेक्ट हैं और मैं इसे कई लोगों के लिए स्वचालित करने में सक्षम होना चाहता हूं उन्हें सभी सीडीटी डाउनलोड करने के बिना। मैं कोई लाभ नहीं हुआ साथ जेडीटी बिना सिर का निर्माण के साथ निम्नलिखित की कोशिश की है:कमांडलाइन

eclipse -nosplash \ 
    -application org.eclipse.jdt.apt.core.aptBuild \ 
    -data [absolute_path_to_desired_workspace] \ 
    -import [absolute_path_to_project_directories] 

आउटपुट से पता चलता "बिल्डिंग कार्यक्षेत्र" और फिर "लॉगआउट," लेकिन कार्यक्षेत्र में ग्रहण की एक सत्र खोलने पैकेज एक्सप्लोरर में कुछ भी नहीं पता चलता है।

वर्कस्पेस में ./metadata/.log फ़ाइल को देखते हुए आयात के साथ कोई त्रुटि दिखाई नहीं दे रही है।

क्या मौजूदा जावा ग्रहण परियोजनाओं के आयात को सीडीटी हेडलेस बिल्ड के बिना ग्रहण में स्वचालित करना संभव नहीं है?

उत्तर

15

दुर्भाग्यवश, जेडीटी वितरण में कोई ऐसा एप्लिकेशन नहीं है जो -import तर्क का समर्थन करेगा, जैसे सीडीटी के org.eclipse.cdt.managedbuilder.core.headlessbuild। लेकिन आप आसानी से एक साधारण एक लिख सकते हैं:

package test.myapp; 

import java.util.LinkedList; 
import java.util.List; 

import org.eclipse.core.resources.IProject; 
import org.eclipse.core.resources.IProjectDescription; 
import org.eclipse.core.resources.IncrementalProjectBuilder; 
import org.eclipse.core.resources.ResourcesPlugin; 
import org.eclipse.core.runtime.NullProgressMonitor; 
import org.eclipse.core.runtime.Path; 
import org.eclipse.equinox.app.IApplication; 
import org.eclipse.equinox.app.IApplicationContext; 

public class Application implements IApplication { 

    public Object start(IApplicationContext context) throws Exception { 

     String[] args = (String[]) context.getArguments().get(IApplicationContext.APPLICATION_ARGS); 

     boolean build = false; 

     // Determine projects to import 
     List<String> projects = new LinkedList<String>(); 
     for (int i = 0; i < args.length; ++i) { 
      if ("-import".equals(args[i]) && i + 1 < args.length) { 
       projects.add(args[++i]); 
      } else if ("-build".equals(args[i])) { 
       build = true; 
      } 
     } 

     if (projects.size() == 0) { 
      System.out.println("No projects to import!"); 
     } else { 
      for (String projectPath : projects) { 
       System.out.println("Importing project from: " + projectPath); 

       // Import project description: 
       IProjectDescription description = ResourcesPlugin.getWorkspace().loadProjectDescription(
         new Path(projectPath).append(".project")); 
       IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(description.getName()); 
       project.create(description, null); 
       project.open(null); 
      } 

      // Build all projects after importing 
      if (build) { 
       System.out.println("Re-building workspace"); 
       ResourcesPlugin.getWorkspace().build(IncrementalProjectBuilder.CLEAN_BUILD, new NullProgressMonitor()); 
       ResourcesPlugin.getWorkspace().build(IncrementalProjectBuilder.FULL_BUILD, new NullProgressMonitor()); 
      } 
     } 
     return null; 
    } 

    public void stop() { 
    } 
} 

आपका plugin.xml की तरह कुछ शामिल करना चाहिए:

<?xml version="1.0" encoding="UTF-8"?> 
<?eclipse version="3.4"?> 
<plugin> 
    <extension 
     id="App" 
     point="org.eclipse.core.runtime.applications"> 
     <application 
      cardinality="singleton-global" 
      thread="main" 
      visible="true"> 
     <run 
       class="test.myapp.Application"> 
     </run> 
     </application> 
    </extension> 
</plugin> 

बनाएँ, और के रूप में "test.myapp_1.0.0.jar" अपने प्लग में निर्यात । इस प्रकार तो आप इसका इस्तेमाल कर सकते हैं:

cp: अपने ग्रहण/dropins/फ़ोल्डर

  • कॉपी करने के लिए test.myapp_1.0.0.jar

    1. कॉपी लक्ष्य कार्यक्षेत्र निर्देशिका के लिए सभी आवश्यक प्लग-इन

      ग्रहण -nosplash -आवेदन test.myapp.App डाटा NewWorkspace आयात/path/to/NewWorkspace /: -r परियोजनाओं/* NewWorkspace/

    2. आयात कार्यक्षेत्र में जरूरत परियोजनाओं प्रोजेक्ट 1-आयात/पथ/से/न्यूवर्क्स स्पेस/प्रोजेक्ट 2 आदि ...

    3. अब, आप ग्रहण/ड्रॉपिन/फ़ोल्डर से test.myapp_1.0.0.jar को सुरक्षित रूप से हटा सकते हैं।

    मैं सभी कोड अपलोड कर दिया है, निर्यात प्लग में यहां जिनमें शामिल हैं: https://github.com/spektom/eclipse-import

  • +0

    मैं अपनी परियोजना का उपयोग किया है मेरी ग्रहण परियोजनाओं का आयात स्वचालित करने के लिए। यह कमाल है, धन्यवाद। अधिक जानकारी के लिए यहां उत्तर देखें: http://stackoverflow.com/a/21229397/1033422। एक कदम जो मैं आगे करना चाहता हूं वह आयात के बाद परियोजना निर्माण को स्वचालित करता है। क्या आपको उस पर कोई विचार है? –

    +1

    हैलो SCH! मैंने उदाहरण प्लगइन के स्रोत कोड को संपादित किया है, कृपया नया "-बिल्ड" विकल्प ढूंढें, जो प्लगइन आयात करने के बाद वर्कस्पेस पुनर्निर्माण को ट्रिगर करता है। – spektom

    +0

    बहुत बढ़िया - धन्यवाद Spektom! फिलहाल, मैं लूपिंग कर रहा हूं और प्लगइन को प्रत्येक परियोजना को अलग से आयात करने के लिए बुला रहा हूं क्योंकि एक खराब परियोजना शेष परियोजनाओं को आयात करने से रोक सकती है। मुझे लगता है, इस मामले में मैं आयात की जा रही अंतिम परियोजना में '-बिल्ड' विकल्प जोड़ सकता हूं? –