1. 新しい質問
- 以前Prestoのローカル開発環境を構築した際に
config.properties
使用したplugin.bundles
設定項目により、読み込む必要があるプラグインモジュールが定義されています 詳細はブログ「win10はIDEAベースでPresto開発環境を構築」を参照してください。 - presto サービスの開始時に、ロードするコンポーネントを指定します。次の 2 つの構成方法があります。
- オンライン サービスの展開では、通常、構成アイテムが使用され
plugin.dir
、デフォルト値はインストール パッケージ内のディレクトリですplugin
。プラグイン ディレクトリ内のすべてのプラグインが読み込まれます。これはオンライン サービスに適しています。 - ローカル開発の場合、
plugin.bundles
構成アイテムは通常、サービスを迅速に起動するためにロードする必要があるプラグインを指定するために使用されます。
- オンライン サービスの展開では、通常、構成アイテムが使用され
plugin.bundles
その後、ラップトップを交換してローカル開発環境を再構築したところ、プラグインが正常にロードできないことが判明しました。- 具体的なエラー情報は次のとおりです。
2022-07-15T22:54:50.333+0800 ERROR main com.facebook.presto.server.PrestoServer Error loading pom: D:\IdeaProjects\facebook-presto-0.223.1\presto-main\..\presto-memory\pom.xml java.lang.RuntimeException: Error loading pom: D:\IdeaProjects\facebook-presto-0.223.1\presto-main\..\presto-memory\pom.xml at io.airlift.resolver.ArtifactResolver.resolvePom(ArtifactResolver.java:143) ... at com.facebook.presto.server.PrestoServer.main(PrestoServer.java:77) Caused by: org.apache.maven.project.ProjectBuildingException: 1 problem was encountered while building the effective model for com.facebook.presto:presto-memory:0.240 [FATAL] Non-resolvable parent POM for com.facebook.presto:presto-root:0.240: Could not transfer artifact com.facebook.airlift:airbase:pom:99 from/to central (http://repo.maven.apache.org/maven2): Failed to transfer http://repo.maven.apache.org/maven2/com/facebook/airlift/airbase/99/airbase-99.pom. Error code 501, HTTPS Required and 'parent.relativePath' points at wrong local POM @ com.facebook.presto:presto-root:0.240, D:\IdeaProjects\facebook-presto-0.223.1\pom.xml, line 5, column 13 for project com.facebook.presto:presto-memory:0.240 at D:\IdeaProjects\facebook-presto-0.223.1\presto-main\..\presto-memory\pom.xml at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:149) at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:102) at io.airlift.resolver.ArtifactResolver.resolvePom(ArtifactResolver.java:136) ... 6 more Caused by: org.apache.maven.model.building.ModelBuildingException: 1 problem was encountered while building the effective model for com.facebook.presto:presto-memory:0.240 [FATAL] Non-resolvable parent POM for com.facebook.presto:presto-root:0.240: Could not transfer artifact com.facebook.airlift:airbase:pom:99 from/to central (http://repo.maven.apache.org/maven2): Failed to transfer http://repo.maven.apache.org/maven2/com/facebook/airlift/airbase/99/airbase-99.pom. Error code 501, HTTPS Required and 'parent.relativePath' points at wrong local POM @ com.facebook.presto:presto-root:0.240, D:\IdeaProjects\facebook-presto-0.223.1\pom.xml, line 5, column 13 at org.apache.maven.model.building.DefaultModelProblemCollector.newModelBuildingException(DefaultModelProblemCollector.java:195) at org.apache.maven.model.building.DefaultModelBuilder.readParentExternally(DefaultModelBuilder.java:841) at org.apache.maven.model.building.DefaultModelBuilder.readParent(DefaultModelBuilder.java:664) at org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:310) at org.apache.maven.model.building.DefaultModelBuilder.build(DefaultModelBuilder.java:232) at org.apache.maven.project.DefaultProjectBuilder.build(DefaultProjectBuilder.java:142) ... 8 more
エラー ログを分析すると、次の情報が得られます。
- 指定されたプラグインの pom.xml ファイルを正しくロードできません。
Error loading pom ...
presto-root
pom ファイルをロードできない理由:親モジュールをデフォルトの中央ウェアハウスからロードできない、com.facebook.airlift:airbase
つまり、祖父母モジュールをロードできない- 中央ウェアハウスにアクセスできない理由: 中央ウェアハウスは http アドレスを使用しますが、現在は https の使用が必要です。
2. 正しい解決策
-
config.properties で、
maven.repo.local
指定されたローカル Maven ウェアハウスを使用します。// 笔者自定义了本地maven仓库,而非使用默认的~/.m2/repository maven.repo.local=/Users/xxx/repo
-
ローカル ウェアハウスには、事前に
mvn clean install
インストールされたプラグイン jar がすでに含まれており、サービスがプラグインのロードを開始すると、jar をローカル ウェアハウスから直接取得できます。2023-03-07T17:21:44.074+0800 INFO main com.facebook.airlift.bootstrap.LifeCycleManager Life cycle startup complete. System ready. 2023-03-07T17:21:44.074+0800 INFO main com.facebook.presto.server.PluginManager -- Loading plugin ../presto-memory/pom.xml -- 2023-03-07T17:21:55.707+0800 DEBUG main com.facebook.presto.server.PluginManager Classpath for ../presto-memory/pom.xml: 2023-03-07T17:21:55.728+0800 DEBUG main com.facebook.presto.server.PluginManager /Users/xxx/IdeaProjects/facebook-presto-0.223.1/presto-memory/target/classes 2023-03-07T17:21:55.730+0800 DEBUG main com.facebook.presto.server.PluginManager /Users/xxx/repo/aopalliance/aopalliance/1.0/aopalliance-1.0.jar ... 2023-03-07T17:21:55.760+0800 INFO main com.facebook.presto.server.PluginManager Installing com.facebook.presto.plugin.memory.MemoryPlugin 2023-03-07T17:21:55.771+0800 INFO main com.facebook.presto.server.PluginManager Registering connector memory 2023-03-07T17:21:55.773+0800 INFO main com.facebook.presto.server.PluginManager -- Finished loading plugin ../presto-memory/pom.xml --
3. 不完全な解決策
-
回り道を避けるために、最初の不完全な解決策を記録しておきます。
-
インターネット上の情報を確認したところ、確かに2020年にウェアハウスが開始されており、代わりにhttpsを使用してアクセスしていることがわかりました。
-
maven-model-builder
グローバル検索。使用されている依存関係のみを検索しますpom-4.0.0.xml
。構成された Maven ウェアハウス アドレスは要件を満たしています。<dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-model-builder</artifactId> <version>3.0.4</version> </dependency>
-
依存関係の分析により、モジュールが使用されているためにインポートされている
maven-model-builder
ことがわかります。presto-main
io.airlift.resolver:resolver:1.4
-
したがって、 presto-mainの
maven-model-builder
依存関係を除けば、 -
結果はまだ動作せず、最終的には
plugin.dir
設定プラグイン情報のみが使用できるようになりますplugin.dir=../presto-server/target/presto-server-0.240/presto-server-0.240/plugin
-
使用時の問題
plugin.dir
:開発プロセス中、モジュールを再コンパイルした後、モジュールの jar をプラグインに配置する必要があります。そうしないと、最新のコードが有効になりません。
4. 追記:Prestoプラグインについて
- Prestoはプラグイン機構を採用しており、SPI仕様に準拠したConnector、Type、Function、System Access ControlなどをPrestoに追加できます。
- プラグインメカニズムにより、コンポーネントの機能をプラグイン可能およびカスタマイズ可能にし、ユーザーのさまざまなニーズを満たすことができます。
- プラグインが異なれば定義も異なりますが、次のことが共通しています。
- pom.xml では、
packaging
メソッドは presto-plugin である必要があります<packaging>presto-plugin</packaging>
- pom.xml では、presto-spi モジュールを導入する必要があります。同時に、SPI で定義されたインターフェイスを実装するか、SPI で定義されたメソッドを書き直す必要があります。
<dependency> <groupId>com.facebook.presto</groupId> <artifactId>presto-spi</artifactId> <scope>provided</scope> </dependency>
- presto-rootのpom.xmlを設定し、プラグインに対応するモジュールを追加する
<module>presto-xxx-module</module>
- ファイル内で
presto-server/src/main/assembly/presto.xml文
、プラグインの出力ディレクトリを設定します。<fileSet> <directory>${project.build.directory}/dependency/presto-xxx-module-${project.version}</directory> <outputDirectory>plugin/xxx-module</outputDirectory> </fileSet>
presto-server
pom.xml ファイルを構成し、次の内容を追加して、インストール パッケージに対応するプラグイン ディレクトリにその jar パッケージがあることを確認します。<dependency> <groupId>com.facebook.presto</groupId> <artifactId>presto-xxx-module</artifactId> <version>${project.version}</version> <type>zip</type> <scope>provided</scope> </dependency>
- pom.xml では、