1

ヘッドレスEclipseビルドを実行しようとしていますが、行き詰まります。私のコンテキストは、EclipseGUIを起動せずにPyDevコード分析を使用したいということです。コード分​​析を行うための他のコマンドラインツール(pyflakes、pylintなど)を知っています。

私がこれまでに持っているコマンドは次のとおりです。

java -jar /path/to/eclipse/plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar -noSplash -data "/path/to/workspace" -application org.eclipse.jdt.apt.core.aptBuild

私のjavaバージョン1.6.0_31、私のeclipseバージョンは3.7.2、私のpydevバージョンは2.5.0です。

コマンドを実行すると、機能しているように見えますが、エラーや警告が表示されることはありません。

...
PyDev: Analyzing 29 of 33 (forms.py)
PyDev: Analyzing 29 of 33 (forms.py)
PyDev: Analyzing 29 of 33 (forms.py)
PyDev: Analyzing 29 of 33 (forms.py)
...

私がいる場合tail -f /path/to/workspace/.metadata/.log、私は巨大なスタックトレースを取得します:

!ENTRY org.eclipse.equinox.preferences 4 2 2012-07-30 17:48:39.612
!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.equinox.preferences".
!STACK 0
java.lang.ExceptionInInitializerError
    at org.eclipse.debug.internal.ui.DebugUIPreferenceInitializer.setDefault(DebugUIPreferenceInitializer.java:186)
    at org.eclipse.debug.internal.ui.DebugUIPreferenceInitializer.setThemeBasedPreferences(DebugUIPreferenceInitializer.java:204)
    at org.eclipse.debug.internal.ui.DebugUIPreferenceInitializer.initializeDefaultPreferences(DebugUIPreferenceInitializer.java:79)
    at org.eclipse.core.internal.preferences.PreferenceServiceRegistryHelper$1.run(PreferenceServiceRegistryHelper.java:281)
..... TRUNCATED ......

!ENTRY org.eclipse.osgi 4 0 2012-07-30 17:48:39.622
!MESSAGE An error occurred while automatically activating bundle org.eclipse.debug.ui (42).
!STACK 0
org.osgi.framework.BundleException: Exception in org.eclipse.debug.internal.ui.DebugUIPlugin.start() of bundle org.eclipse.debug.ui.
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:734)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
    at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:299)
..... TRUNCATED .......

java.lang.IllegalStateException: Workbench has not been created yet.
    at org.eclipse.ui.PlatformUI.getWorkbench(PlatformUI.java:92)
    at org.eclipse.debug.internal.ui.contextlaunching.LaunchingResourceManager.startup(LaunchingResourceManager.java:546)
    at org.eclipse.debug.internal.ui.DebugUIPlugin.getLaunchingResourceManager(DebugUIPlugin.java:315)
    at org.eclipse.debug.internal.ui.DebugUIPlugin.start(DebugUIPlugin.java:516)
..... TRUNCATED ......

!ENTRY org.eclipse.osgi 4 0 2012-07-30 17:48:39.624
!MESSAGE An error occurred while automatically activating bundle org.eclipse.debug.core (41).
!STACK 0
org.osgi.framework.BundleException: Exception in org.eclipse.debug.core.DebugPlugin.start() of bundle org.eclipse.debug.core.
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:734)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
    at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:299)
..... TRUNCATED ......

私の疑いは、PyDevがエラー/警告をレンダリングするためにGUIを必要としているということです。

4

1 に答える 1

2

PyDevはエラー/警告をレンダリングするためにGUIを必要とし、一般にコマンドラインで使用するために行われていませんでした...とは言っても、GUIを必要とせずにコード分析を実行する単体テストがあります(またはEclipseがロードされていても)、それが機能するように、メモリ内のインタプリタ/プロジェクトを構成する必要があります。

見る:

https://github.com/aptana/Pydev/blob/development/plugins/com.python.pydev.analysis/tests/com/python/pydev/analysis/OccurrencesAnalyzerTest.java

https://github.com/aptana/Pydev/blob/development/plugins/com.python.pydev.analysis/tests/com/python/pydev/analysis/AnalysisTestsBase.java

Eclipseワークベンチをまったくロードせずにコード分析を行うテストの場合(つまり、Eclipseをヘッドレスで実行する必要はありません-単純なJavaプログラムとして実行できますが、それでもJavaを実行する必要がありますmain([])CLASSPATHでPyDevを使用し、そのAPIを使用して、PyDevおよびprojects/pythonpathで使用されるインタープリターを適切に設定します。

テストのセットアップを確認できます(つまり、CodeCompletionTestsBase / AnalysisTestsBaseなどのスーパークラスも確認することを忘れないでください)。

注:このようなmain([])を作成する場合は、他の人が使用する可能性があるため、PyDevのパッチを提供してください...

実装上の注意として、このようなメインは、起動中のシェルから現在のすべてのPYTHONPATHエントリを収集し、インタープリターでそれらすべてを構成する必要があります...また、すべてのファイルを分析するために、パラメーターとしてディレクトリを受け取る必要があります。ツリー(スタートアップはおそらく設定にほとんどの時間を費やすでしょう。したがって、PyDevコード分析はスタートアップで多くのものをキャッシュするために行われたので、理想的には1回の実行からできるだけ多くのファイルを分析します。次に、RAMからの情報を使用します。または、常に稼働しているサーバープロセスを作成しますか?)

于 2012-08-03T16:21:55.730 に答える