-1

私の会社ではバージョン管理に Perforce を使用しており、p4java を使用して Perforce の使用を自動化するソフトウェアを作成しています。コンピューターで p4tickets ファイルを使用するために有効な情報を渡しているにもかかわらず、コードが Perforce サーバーに接続できないという問題が発生しています。

まず、「p4 login」を実行して p4ticket を取得するために perforce にログオンし、~/.p4tickets ファイルを作成しました。しかし、p4java を使用して p4ticket ファイルを使用して接続するプログラムを実行すると、null が返されます。

AuthTicket auth = AuthTicketsHelper.getTicket(username, serverAddr, p4TicketsFilePath);
// auth == null

渡すユーザー名が「p4 login」を使用したときに使用した $P4USER 環境変数と一致すること、および serverAddr が $P4PORT によって参照されるホスト名と一致することを再確認しました。p4TicketsFilePath も存在し、有効期限が切れていない私のチケットを持つ .p4tickets ファイルへの正しいパスです。getTicket がまだ null を返す理由を探しています。

4

1 に答える 1

0

AuthTicketsHelper からソース コードをコピーし、print ステートメントを挿入することで、この問題をデバッグできます。ここに私のロガーがあります:

private static final Logger logger = LoggerFactory.getLogger(YourClass.class);

(ロガーがない場合は、代わりに System.out.println() を String.format("... %s ... %s") で実行できます。) 次に、このコードをコピーします。

AuthTicket auth;
{
    AuthTicket foundTicket = null;
    String serverAddress = serverAddr;
    String ticketsFilePath = p4TicketsFilePath;
    String userName = username;

    if (serverAddress != null) {
        logger.info("P4TICKETS 1");
        if (serverAddress.indexOf(':') == -1) {
            serverAddress += "localhost:" + serverAddress;
            logger.info("P4TICKETS 2");
        }
        for (AuthTicket ticket : AuthTicketsHelper.getTickets(ticketsFilePath)) {
            logger.info("P4TICKETS 3 {} - {} - {} - {}", serverAddress, ticket.getServerAddress(), userName, ticket.getUserName());
            if (serverAddress.equals(ticket.getServerAddress())
                    && (userName == null || userName.equals(ticket
                            .getUserName()))) {
                logger.info("P4TICKETS 4");
                foundTicket = ticket;
                break;
            }
        }
        logger.info("P4TICKETS 5");
    }
    auth = foundTicket;
}

出力のコード パスをたどって、何が問題なのかを確認します。私の場合、サーバー名はコード内のホスト名でしたが、.p4tickets ファイルにはサーバー名の IP アドレスが含まれていました。

于 2015-03-05T03:03:58.570 に答える