title: IllegalArgumentException when authenticating using Google's Java API client library
body: <p>I'm trying to run QuickStart.java <a href="https://developers.google.com/sheets/api/quickstart/java" rel="noreferrer">https://developers.google.com/sheets/api/quickstart/java</a> on NetBeans 8.2. I've imported all the Google Libraries and I'm having this issue</p>
  
  <pre><code>Exception in thread "main" java.lang.IllegalArgumentException
  at com.google.api.client.repackaged.com.google.common.base.Preconditions.checkArgument(Preconditions.java:111)
  at com.google.api.client.util.Preconditions.checkArgument(Preconditions.java:37)
  at com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets.getDetails(GoogleClientSecrets.java:82)
  at com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow$Builder.&lt;init&gt;(GoogleAuthorizationCodeFlow.java:197)
  at Quickstart.authorize(Quickstart.java:71)
  at Quickstart.getSheetsService(Quickstart.java:90)
  at Quickstart.main(Quickstart.java:98)
  C:\Users\kevin\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
  </code></pre>
  
  <p>I'd tried what's mention on <a href="https://stackoverflow.com/questions/30634827/warning-unable-to-change-permissions-for-everybody">WARNING: unable to change permissions for everybody:</a>, but didn't work. My code is the following: </p>
  
  <pre><code>import com.google.api.client.auth.oauth2.Credential;
  import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
  import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
  import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
  import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
  import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
  import com.google.api.client.http.HttpTransport;
  import com.google.api.client.json.jackson2.JacksonFactory;
  import com.google.api.client.json.JsonFactory;
  import com.google.api.client.util.store.FileDataStoreFactory;
  import com.google.api.services.sheets.v4.SheetsScopes;
  import com.google.api.services.sheets.v4.model.*;
  import com.google.api.services.sheets.v4.Sheets;
  import java.io.FileInputStream;
  
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.InputStreamReader;
  import java.util.Arrays;
  import java.util.List;
  
  public class Quickstart {
      /** Application name. */
      private static final String APPLICATION_NAME =
          "Google Sheets API Java Quickstart";
  
      /** Directory to store user credentials for this application. */
      private static final java.io.File DATA_STORE_DIR = new java.io.File(
          System.getProperty("user.home"), ".credentials/sheets.googleapis.com-java-quickstart");
  
      /** Global instance of the {@link FileDataStoreFactory}. */
      private static FileDataStoreFactory DATA_STORE_FACTORY;
  
      /** Global instance of the JSON factory. */
      private static final JsonFactory JSON_FACTORY =
          JacksonFactory.getDefaultInstance();
  
      /** Global instance of the HTTP transport. */
      private static HttpTransport HTTP_TRANSPORT;
  
      /** Global instance of the scopes required by this quickstart.
       *
       * If modifying these scopes, delete your previously saved credentials
       * at ~/.credentials/sheets.googleapis.com-java-quickstart
       */
      private static final List&lt;String&gt; SCOPES =
          Arrays.asList(SheetsScopes.SPREADSHEETS_READONLY);
  
      static {
          try {
              HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
              DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR);
          } catch (Throwable t) {
              t.printStackTrace();
              System.exit(1);
          }
      }
  
      /**
       * Creates an authorized Credential object.
       * @return an authorized Credential object.
       * @throws IOException
       */
      public static Credential authorize() throws IOException {
          // Load client secrets.
          InputStream in = new FileInputStream("C:\\Users\\kevin\\Desktop\\Excel\\client_secret.json");
          GoogleClientSecrets clientSecrets =
              GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
  
          // Build flow and trigger user authorization request.
          GoogleAuthorizationCodeFlow flow =
                  new GoogleAuthorizationCodeFlow.Builder(
                          HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
                  .setDataStoreFactory(DATA_STORE_FACTORY)
                  .setAccessType("offline")
                  .build();
          Credential credential = new AuthorizationCodeInstalledApp(
              flow, new LocalServerReceiver()).authorize("user");
          System.out.println(
                  "Credentials saved to " + DATA_STORE_DIR.getAbsolutePath());
          return credential;
      }
  
      /**
       * Build and return an authorized Sheets API client service.
       * @return an authorized Sheets API client service
       * @throws IOException
       */
      public static Sheets getSheetsService() throws IOException {
          Credential credential = authorize();
          return new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
                  .setApplicationName(APPLICATION_NAME)
                  .build();
      }
  
      public static void main(String[] args) throws IOException {
          // Build a new authorized API client service.
          Sheets service = getSheetsService();
  
          // Prints the names and majors of students in a sample spreadsheet:
          // https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit
          String spreadsheetId = "1giT9gM-xYs1UriAw6yFLfJ2ZYgvPzNMHyKr5R2j1ZII";
          String range = "Class Data!A2:E";
          ValueRange response = service.spreadsheets().values()
              .get(spreadsheetId, range)
              .execute();
          List&lt;List&lt;Object&gt;&gt; values = response.getValues();
          if (values == null || values.size() == 0) {
              System.out.println("No data found.");
          } else {
            System.out.println("Name, Major");
            for (List row : values) {
              // Print columns A and E, which correspond to indices 0 and 4.
              System.out.printf("%s, %s\n", row.get(0), row.get(4));
            }
          }
      }
  }
  </code></pre>