AuthTicketsHelper.getTicket()返回null

时间:2015-03-05 03:03:59

标签: p4java

我的公司使用Perforce进行版本控制,并且我编写了使用p4java自动使用Perforce的软件。我遇到了一个问题,我的代码无法连接到Perforce服务器,即使我传递了有效信息以便在我的计算机上使用p4tickets文件。

首先,我通过运行" p4 login"来登录perforce以获得p4ticket,它创建了〜/ .p4tickets文件。但是当我运行使用p4java使用p4ticket文件连接的程序时,它返回null。

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

我已经仔细检查过,我传入的用户名与我使用的#P4; p4 login"时的$ P4USER环境变量匹配,以及该serverAddr与主机名匹配这是我的$ P4PORT引用的。 p4TicketsFilePath也存在,并且是具有我的票证的.p4tickets文件的正确路径,该文件未过期。我正在寻找getTicket仍然返回null的原因。

1 个答案:

答案 0 :(得分:0)

您可以通过从AuthTicketsHelper复制源代码并插入print语句来调试此问题。这是我的记录器:

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

(如果您没有记录器,则可以使用String.format(" ...%s ...%s")代替System.out.println()。 )然后,复制此代码。

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地址。