title: How to successfully run "Java Quickstart" sample for Google Drive API?
body: <p>I followed Google's <a href="https://developers.google.com/drive/v3/web/quickstart/java" rel="nofollow noreferrer">Java Quickstart</a> guide to try to develop a search function for Google Drive files. After I executed <code>gradle -q run</code> or <code>gradle run</code> command, it open a web page and shows "Error: redirect_uri_mismatch" message.</p>
  
  <p><strong>The errors messages:</strong>
  <a href="https://i.stack.imgur.com/dXK1A.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/dXK1A.png" alt=""></a></p>
  
  <p><a href="https://i.stack.imgur.com/k74Y5.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/k74Y5.png" alt=""></a></p>
  
  <p><a href="https://i.stack.imgur.com/XKWPv.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/XKWPv.png" alt=""></a></p>
  
  <p><strong>Here is the code:</strong></p>
  
  <pre><code>package main.java;
  
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.InputStreamReader;
  import java.util.Arrays;
  import java.util.List;
  
  import com.google.api.client.auth.oauth2.Credential;
  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.JsonFactory;
  import com.google.api.client.json.jackson2.JacksonFactory;
  import com.google.api.client.util.store.FileDataStoreFactory;
  import com.google.api.services.drive.Drive;
  import com.google.api.services.drive.DriveScopes;
  import com.google.api.services.drive.model.File;
  import com.google.api.services.drive.model.FileList;
  
  public class Quickstart {
      /** Application name. */
      private static final String APPLICATION_NAME = "Drive 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/drive-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/drive-java-quickstart
       */
      private static final List&lt;String&gt; SCOPES = Arrays.asList(DriveScopes.DRIVE_METADATA_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 = Quickstart.class.getResourceAsStream("/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 Drive client service.
       * 
       * @return an authorized Drive client service
       * @throws IOException
       */
      public static Drive getDriveService() throws IOException {
          Credential credential = authorize();
          return new Drive.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.
          Drive service = getDriveService();
  
          // Print the names and IDs for up to 10 files.
          FileList result = service.files().list().setPageSize(10).setFields("nextPageToken, files(id, name)").execute();
          List&lt;File&gt; files = result.getFiles();
          if (files == null || files.size() == 0) {
              System.out.println("No files found.");
          } else {
              System.out.println("Files:");
              for (File file : files) {
                  System.out.printf("%s (%s)\n", file.getName(), file.getId());
              }
          }
      }
  }
  </code></pre>
  
  <p><strong>The development environment:</strong></p>
  
  <p><a href="https://i.stack.imgur.com/ckB9r.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/ckB9r.png" alt=""></a></p>
  
  <p><a href="https://i.stack.imgur.com/1BKRA.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/1BKRA.png" alt=""></a></p>
  
  <p><a href="https://i.stack.imgur.com/c22O9.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/c22O9.png" alt=""></a></p>
  
  <p><a href="https://i.stack.imgur.com/r1vWw.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/r1vWw.png" alt=""></a></p>
  
  <p><a href="https://i.stack.imgur.com/1Awih.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/1Awih.png" alt=""></a></p>
  
  <p><strong>The build.gradle file:</strong></p>
  
  <pre><code>apply plugin: 'java'
  apply plugin: 'application'
  
  mainClassName = 'Quickstart'
  sourceCompatibility = 1.7
  targetCompatibility = 1.7
  version = '1.0'
  
  repositories {
      mavenCentral()
  }
  
  dependencies {
      compile 'com.google.api-client:google-api-client:1.22.0'
      compile 'com.google.oauth-client:google-oauth-client-jetty:1.22.0'
      compile 'com.google.apis:google-api-services-drive:v3-rev68-1.22.0' 
  }
  </code></pre>
  
  <p><strong>My Google Developer Console:</strong>
  <a href="https://i.stack.imgur.com/5etP4.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/5etP4.png" alt=""></a></p>
  
  <p>What should I do to successfully run the <code>gradle -q run</code> or <code>gradle run</code> command?
  How to correctly configure the "Redirect_URI"?</p>