0

Maven protocプラグインと、Cygwin内に構築したprotoc実行可能ファイルを使用して、プロトコルバッファコードをコンパイルしようとしています。Cygwin または Windows コマンドラインからこれを行うことはできません。以下は、Windows で実行したときに得られる出力ですが、Cygwin から実行した場合のエラーも同じです。問題がパス変換にあった場合、そのうちの1つが機能すると予想されるため、これは奇妙だと思います。実行可能ファイルが Cygwin の g++ でビルドされたという事実が影響を与える可能性はありますか? (明らかに、問題のディレクトリは存在します。)

編集:mavenを写真から取り出して、protocを手動で呼び出すと、同じエラーが発生します。

編集 2: 相対パスまたは絶対パスを使用して Cygwin から手動で protoc を呼び出すことで、これを修正できます (ただし、チルダ展開は機能しません)。相対パスまたは絶対パスを使用して Windows から手動で protoc を呼び出すと、引き続き同じエラーが発生します。

[デバッグ] (f) outputDirectory = c:\cygwin64\home\dan\code\server\protocol\target\generated-sources\protobuf\java
[デバッグ] (f) プロジェクト = MavenProject: server:protocol:1.0-SNAPSHOT @ c:\cygwin64\home\dan\code\server\protocol\pom.xml
[デバッグ] (f) protoSourceRoot = c:\cygwin64\home\dan\code\server\protocol\src\main\proto
[デバッグ] (f) protocPluginDirectory = c:\cygwin64\home\dan\code\server\protocol\target\protoc-plugins
[デバッグ] (f) remoteRepositories = [
      id: セントラル
      URL: https://repo.maven.apache.org/maven2
      レイアウト: デフォルトのスナップショット: [有効 => false、更新 => 毎日]
      リリース: [有効 => true、更新 => 毎日]
      ]
[デバッグ] (f) セッション = org.apache.maven.execution.MavenSession@24fb6a80
[デバッグ] (f) スキップ = false
[デバッグ] (f) staleMillis = 0
[デバッグ] (f) temporaryProtoFileDirectory = c:\cygwin64\home\dan\code\server\protocol\target\protoc-dependencies
[デバッグ] (f) writeDescriptorSet = false
[デバッグ] -- 構成の終了 --
[警告] 'protocExecutable' パラメーターは構成されていません。デフォルトを使用しています: 'protoc'
[デバッグ] プロト ソース ルート:
[デバッグ] c:\cygwin64\home\dan\code\server\protocol\src\main\proto
[デバッグ] [PROTOC] 実行可能ファイル:
[デバッグ] [PROTOC] プロトコル
[DEBUG] [PROTOC] Protobuf インポート パス:
[DEBUG] [PROTOC] c:\cygwin64\home\dan\code\server\protocol\src\main\proto [DEBUG] [PROTOC] Java 出力ディレクトリ:
[デバッグ] [PROTOC] c:\cygwin64\home\dan\code\server\protocol\target\generated-sources\protobuf\java
[DEBUG] [PROTOC] Protobuf 記述子:
[デバッグ] [PROTOC] c:\cygwin64\home\dan\code\server\protocol\src\main\proto\message.proto
[DEBUG] [PROTOC] コマンド ライン オプション:
[デバッグ] [PROTOC]
    --proto_path=c:\cygwin64\home\dan\code\server\protocol\src\main\proto
    --java_out=c:\cygwin64\home\dan\code\server\protocol\target\generated-sources\protobuf\java
    c:\cygwin64\home\dan\code\server\protocol\src\main\proto\message.proto
[INFO] 1 つの proto ファイルを c:\cygwin64\home\dan\code\server\protocol\target\generated-sources\protobuf\java にコンパイルしています
[エラー] PROTOC FAILED: c: 警告: ディレクトリが存在しません。c:\cygwin64\home\dan\code\server\protocol\src\main\proto\message.proto: --proto_path (または -I) を使用して指定されたパス内にファイルが存在しません。このファイルを含む --proto_path を指定する必要があります。proto_path は、.proto ファイル名の正確な接頭辞でなければならないことに注意してください。protoc は、2 つのパス (たとえば、絶対パスと相対パス) が等しい場合を判断するにはあまりにも馬鹿げています (想像以上に難しいです)。
4

1 に答える 1

2

Cygwin を使用してビルドした実行可能ファイルは、完全な Cygwin 環境に依存し、実行方法に関係なく、Cygwin プログラムとして動作します。つまり、Cygwin 以外のシェルから Cygwin プログラムを実行しても、Cygwin プログラムとして動作します。Cygwin プログラムは、バックスラッシュとドライブ文字を使用する Windows スタイルのパスを受け入れません。/cygdrive/c/の代わりにeg を使用する必要がありますc:\

一般に、非 Cygwin シェルから Cygwin でコンパイルされたコマンドライン ツールを使用しようとしないでください。代わりに、protocMSVC または MinGW を使用してビルドするか、Google が提供するビルド済みの Windows バイナリを使用してください。

于 2015-06-22T04:06:49.497 に答える