IntelliJ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░

рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрдВрдЯреЗрд▓реАрдЬ рдЖрдИрдбреАрдИ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓реЗрдЦ рд╣реИрдмреЗ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧреЗ - рдПрдХ , рдФрд░ рдпрд╣рд╛рдВ рдПрдХ рдФрд░ ред

рдореИрдВ рдЗрд╕ рд╢рд╛рдирджрд╛рд░ рдкреНрд░рд╡реГрддреНрддрд┐ рдХреЛ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛ рдФрд░ рдЗрдиреНрдЯреЗрд▓рд┐рдЬ рдУрдкрдирдПрдкреАрдЖрдИ рдХреЗ рдЙрди рд╕реНрдерд╛рдиреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрднреА рддрдХ рдЫреБрдЖ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ; рдФрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдордЬрд╝реЗрджрд╛рд░ рдХреЙрдорд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдкреНрд▓рдЧ-рдЗрди рд╣реЛрдЧрд╛ред





рд╡рд┐рд╕реНрддрд╛рд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдмрд╕ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмрд╛рдд рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рд╕реЙрдХреЗрдЯ рдореЗрдВ рдореЗрд░реЗ рдкрд╕рдВрджреАрджрд╛ рдЧреАрдХ рдПрдВрдб рдкреЛрдХ рд╕реЗ рддрд╛рдЬрд╛ рддрд╕реНрд╡реАрд░реЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╕рдордп-рд╕рдордп рдкрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд╛рдЗрдЯ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдХреЗ рдбрд┐рд╕реНрдХ рдкрд░ рдХреИрд╢рд┐рдВрдЧ рдХрд░рддрд╛ рд╣реИред рд╕реВрддреНрд░, рд╡реИрд╕реЗ, GitHub'e рдкрд░ред

рдЬреЛ рд▓реЛрдЧ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рддрд░реНрдХ рд╣реИрдВ - рдХреЙрдорд┐рдХреНрд╕ CC BY-SA 3.0 рдХреЗ рдЕрдЪреНрдЫреЗ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХрд╛рдиреВрдиреА рд╣реИ :)

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рд╕реЗ, plugin.xml рдФрд░ рдЕрдиреНрдп рдмреБрдирд┐рдпрд╛рджреА рдЪреАрдЬреЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ - рд╕рд╛рде рд╣реА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдВрдХ - рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрд░реЛрдХреНрдд рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИрдВ, рд╣рдо рдЗрд╕реЗ рджреЛрд╣рд░рд╛рдПрдВрдЧреЗ рдирд╣реАрдВ; рдФрд░ рдореИрдВ рдЙрдирдХреЗ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реВрдБред

рдкреНрд░реЙрдХреНрд╕реА рд╕рдорд░реНрдерди


рдЗрдВрдЯреЗрд▓реАрдЬ рдЖрдИрдбреАрдИрдП (рдФрд░ рдЕрдиреНрдп рдЖрдИрдбреАрдИ) рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ, рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред

рд▓реЗрдХрд┐рди рдЕрдкрдиреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдЖрдИрдбреАрдИ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ com.intellij.util.net.HttpConfigurable рд╡рд░реНрдЧ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рджреЗрдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реИрдВ: USE_HTTP_PROXY рдзреНрд╡рдЬ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ; рд╕рд╛рде рд╣реА рдореЗрдЬрдмрд╛рди, рдмрдВрджрд░рдЧрд╛рд╣ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реАред

рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдХреЗ, рд╡рд┐рдзрд┐ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
  /** * Call this function before every HTTP connection. * If system configured to use HTTP proxy, this function * checks all required parameters and ask password if * required. * @param url URL for HTTP connection * @throws IOException */ public void prepareURL (String url) throws IOException { 


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ url рдХреЗ рд▓рд┐рдП рдХреЛрдб рдореЗрдВ url рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
  // Ensure that proxy (if any) is set up for this request. final HttpConfigurable httpConfigurable = HttpConfigurable.getInstance(); httpConfigurable.prepareURL(url.toExternalForm()); 


JetBrains рдлрд╝реЛрд░рдо рдореЗрдВ, рдХреЛрдИ рд╢рдкрде рд▓реЗрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдорджрдж рдирд╣реАрдВ рдХрд░рддреА рд╣реИ - рд▓реЗрдХрд┐рди, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╡реЗ рд╡реНрдпрд░реНрде рд╣реИрдВред

рдкреНрд▓рдЧ-рдЗрди рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдирд╛


рдореБрдЭреЗ рдПрдХ рдЕрд▓рдЧ рдзрд╛рдЧрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЬреЛ рд╕рдордп-рд╕рдордп рдкрд░ рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдкреГрд╖реНрда рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ред

рдпрд╣ ApplicationComponent рдорджрдж рдХрд░реЗрдЧрд╛ред рдкреНрд▓рдЧрд┐рди рд╕рдВрд░рдЪрдирд╛ рд▓реЗрдЦ рдореЗрдВ, рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рдЙрдирдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдк рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╣рдорд╛рд░реЗ рдШрдЯрдХ рдХреЛ plugin.xml рдЬреЛрдбрд╝реЗрдВ:

  <application-components> <component> <implementation-class>com.abelsky.idea.geekandpoke.ComicsPlugin</implementation-class> <interface-class>com.abelsky.idea.geekandpoke.ComicsPlugin</interface-class> </component> </application-components> 


рдФрд░ рдЗрд╕рдореЗрдВ рд╣рдо initComponent рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 public class ComicsPlugin implements ApplicationComponent { private static final int UPDATE_PERIOD = 15 * 60 * 60 * 1000; //         ; //    ProjectComponent -    . @Override public void initComponent() { startUpdateTimer(); } private void startUpdateTimer() { final Timer timer = new Timer("Geek and Poke updater"); timer.schedule(new TimerTask() { @Override public void run() { //   -   15 ... } }, 0, ComicsPlugin.UPDATE_PERIOD); } 


рд╕реНрдерд╛рдиреАрдпрдХрд░рдг


рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реНрдирд┐рдкреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ:

 package com.abelsky.idea.geekandpoke.messages; // ... public class MessageBundle { private static Reference<ResourceBundle> bundleRef; //     com/abelsky/idea/geekandpoke/messages/MessageBundle.properties // -  key-value .properties-. @NonNls private static final String BUNDLE = "com.abelsky.idea.geekandpoke.messages.MessageBundle"; private MessageBundle() { } public static String message(@PropertyKey(resourceBundle = BUNDLE)String key, Object... params) { return CommonBundle.message(getBundle(), key, params); } private static ResourceBundle getBundle() { ResourceBundle bundle = null; if (MessageBundle.bundleRef != null) { bundle = MessageBundle.bundleRef.get(); } if (bundle == null) { bundle = ResourceBundle.getBundle(BUNDLE); MessageBundle.bundleRef = new SoftReference<ResourceBundle>(bundle); } return bundle; } } 


рдпрд╣рд╛рдВ рдпрд╣ рдХрдИ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ SoftBeference рдореЗрдВ ResourceBundle рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рд╣реИред рдпрд╣ IDEA рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдПрдХ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рдЕрднреНрдпрд╛рд╕ рд╣реИ - рдЧреИрд░-рд▓рд┐рдВрдХ рдореЗрдВ рдпрдерд╛рд╕рдВрднрд╡ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдПред

рд╡реИрд╕реЗ, рдореИрдВ рдЖрдкрдХреЛ com.intellij.reference.SoftReference рд╡рд░реНрдЧ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ - рдпрд╣ рд╕реНрд╡рдпрдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╣реИрдВ рдЬреЛ java.lang.ref рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрдЬрд╛рдп рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ java.lang.ref ред рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдкрдХреЛ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рдкрд░ рд╕рдВрджреЗрд╣ рд╣реИ, рддреЛ com.intellij.reference.SoftReference рдЬрд▓реНрджреА рд╕реЗ рдПрдХ рдХрдбрд╝реА рд╕реЗ рдХрдбрд╝реА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред

рджреВрд╕рд░рд╛ рд╣реИ рдПрдиреЛрдЯреЗрд╢рди org.jetbrains.annotations.PropertyKey ред рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдиреЛрдЯреЗрдЯ рд╡рд┐рдзрд┐ рдХрд╛ рддрд░реНрдХ рдХреЗрд╡рд▓ рд╕рдВрд╕рд╛рдзрдирдмрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдмрдВрдбрд▓ рд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ .properties рдлрд╝рд╛рдЗрд▓ рдФрд░ рдХреЛрдб рдореЗрдВ рдЪрд╛рдмрд┐рдпрд╛рдБ рд╕рд┐рдВрдХ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рд╣реИрдВ (рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ IDEA рдореЗрдВ рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд┐рдВрдЧ рдмрд╣реБрдд рдХреБрдЫ рд╕реАрдЦрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреБрдВрдЬреА рдФрд░ рдмрдВрдбрд▓ рдХреЗ рдмреАрдЪ рдПрдХ рд╕рдВрдмрдВрдз рд╣реИ)ред

рддреАрд╕рд░рд╛, рдПрдиреЛрдЯреЗрд╢рди org.jetbrains.annotations.NonNls / org.jetbrains.annotations.Nls , рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ (рдпрд╛, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдирд╣реАрдВ) рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП JetBrains рдкреНрд░рд▓реЗрдЦрди рдпрд╣рд╛рдБ рд╣реИ ред

рдЕрдзрд┐рд╕реВрдЪрдирд╛


рдХреБрдЫ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рд╕реБрдВрджрд░ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:



рдпрд╣рд╛рдБ рдпрд╣ рд╡рд░реНрдЧ com.intellij.notification.Notifications рдУрд░ рджреЗрдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:

  private void notifyNewEntry() { final Notification newEntryNotification = new Notification( /*   */ MessageBundle.message("notification.new.strip.group"), /*  */ MessageBundle.message("notification.new.strip.title"), /*  */ MessageBundle.message("notification.new.strip.content"), NotificationType.INFORMATION); //     UI- -      invokeLater. Notifications.Bus.notify(newEntryNotification); } 


рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╕рдореВрд╣ рдЖрдИрдбреАрдИ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рд▓реЗрдЦрди рджреЗрдЦреЗрдВред



рд╕реЗрдЯрд┐рдВрдЧреНрд╕




рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдкреНрд▓рдЧ-рдЗрди рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧ рдкреГрд╖реНрда рдХреЛ рдХреИрд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред

рд▓реЗрдХрд┐рди рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рддреЛ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, plugin.xml рдореЗрдВ plugin.xml :

  <extensions defaultExtensionNs="com.intellij"> <!-- ... --> <applicationConfigurable instance="com.abelsky.idea.geekandpoke.ui.SettingsPanel"/> </extensions> 


рджреВрд╕рд░реЗ, рд╣рдо com.intellij.openapi.options.Configurable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ com.intellij.openapi.options.Configurable рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдЗрдирдореЗрдВ рд╕реЗ, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг - createComponent - рдЙрд╕ рдШрдЯрдХ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕ рдкрд░ рд╣рдорд╛рд░реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреА рд╣реИрдВред

рдСрдлрд╝рд▓рд╛рдЗрди рдХреИрд╢


рдбрд┐рд╕реНрдХ рдкрд░ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкреНрд▓рдЧ-рдЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреИрд╢ рдХреЛ рд▓рд┐рдЦрддреЗ рд╕рдордп рдПрдХ рд╣реА рд╕рд╡рд╛рд▓ рдЙрдареЗрдЧрд╛ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдпрд╛ %TMP% рдореЗрдВ рдХреЛрдИ рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЙрдиреНрд╣реЗрдВ %USERPROFILE% рдореЗрдВ рдХрд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдк рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд░реЛрдЪрдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ - рдЙрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдкреНрд▓рдЧ-рдЗрди рд╕реНрд╡рдпрдВ рд╕реНрдерд╛рдкрд┐рдд рд╣реИред

%USERPROFILE%/.IdeaIC11/config/plugins/PLUGIN_NAME рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВ; рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдкрде рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ idea.plugins.path рдХреЛ idea.properties рдореЗрдВ рд╕реЗрдЯ рдХрд░рдХреЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

  // PLUGIN_ID -   id  plugin.xml. final PluginId id = PluginId.getId(PLUGIN_ID); final IdeaPluginDescriptor plugin = PluginManager.getPlugin(id); //    . File path = plugin.getPath(); 


рдкрд░рд┐рдгрд╛рдореА рдкрде, рд╡реИрд╕реЗ, рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ JAR рдлрд╝рд╛рдЗрд▓ рд╣реЛ рд╕рдХрддреА рд╣реИ - рдпрджрд┐ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдПрдХ рдЕрд▓рдЧ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЕрдирдкреИрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдкреБрдирд╢реНрдЪ


рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдХреНрд╖рд┐рдкреНрдд FAQ IntelliJ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдореЗрдВ рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдФрд░ рдЗрд╕ рдмреАрдЪ, рдореИрдВ рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореИрдВ рдпрд╣ рд╕рдм рд╕рдордЭрдиреЗ рд▓рдЧрд╛ рдерд╛ - рдПрдХ рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдИрдбрд┐рдпрд╛ рдкреНрд▓рдЧ-рдЗрди;)

Source: https://habr.com/ru/post/In150829/


All Articles