Как отключить Gmail Api guava 20

#gradle #gmail #gmail-api #guava

Вопрос:

Я реализовал API Gmail, чтобы получить некоторые токены подтверждения по электронной почте. С помощью Api Gmail автоматически при запуске команды «Gradle run» из git перейдите к этой зависимости guava guava 20, но эта зависимость вызывает у меня некоторые проблемы, поэтому мне нужно добавить guava 25.

Теперь я хотел бы отключить старую зависимость от гуавы>, но я не знаю, как это сделать. Я перепробовал все известные решения из Stackoverflow, но мне ничего не помогло. В конце концов, я удалил эту зависимость непосредственно из папки, но теперь мой код не компилируется, поэтому я не знаю, что делать.

Изображение 1 API GMail

 package GmailAPIPackage;
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.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.client.repackaged.org.apache.commons.codec.binary.Base64;
import com.google.api.client.repackaged.org.apache.commons.codec.binary.StringUtils;
import com.google.api.client.util.store.FileDataStoreFactory;
import com.google.api.services.gmail.Gmail;
import com.google.api.services.gmail.GmailScopes;
import com.google.api.services.gmail.model.Label;
import com.google.api.services.gmail.model.ListLabelsResponse;
import com.google.api.services.gmail.model.ListMessagesResponse;
import com.google.api.services.gmail.model.Message;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.security.GeneralSecurityException;
import java.util.Collections;
import java.util.List;

public class GmailQuickstart {

private static final String APPLICATION_NAME = "Gmail API Java Quickstart";

private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();

private static final String TOKENS_DIRECTORY_PATH = "tokens";

/**
* Global instance of the scopes required by this quickstart.
* If modifying these scopes, delete your previously saved tokens/ folder.
*/

private static final List<String> SCOPES = Collections.singletonList(GmailScopes.GMAIL_MODIFY);

private static final String CREDENTIALS_FILE_PATH = "/credentials.json";

/**
* Creates an authorized Credential object.
* @param HTTP_TRANSPORT The network HTTP Transport.
* @return An authorized Credential object.
* @throws IOException If the credentials.json file cannot be found.
*/

private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {

// Load client secrets.

InputStream in = GmailQuickstart.class.getResourceAsStream(CREDENTIALS_FILE_PATH);

if (in == null) {
throw new FileNotFoundException("Resource not found: "   CREDENTIALS_FILE_PATH);
}

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(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH)))

.setAccessType("offline")
.build();

LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build();
return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
}

public static void getToken() throws GeneralSecurityException, IOException {

// Build a new authorized API client service.

final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();

Gmail service = new Gmail.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
.setApplicationName(APPLICATION_NAME)

.build();

// Print the labels in the user's account.

String user = "me";

ListLabelsResponse listResponse = service.users().labels().list(user).execute();
List<Label> labels = listResponse.getLabels();

if (labels.isEmpty()) {

System.out.println("No labels found.");

} else {

System.out.println("Labels:");

for (Label label: labels) {

System.out.printf("- %sn", label.getName());

}
}

// Access Gmail inbox

Gmail.Users.Messages.List request = service.users().messages().list(user).setQ("from: "   "notification@casinosieger.com");

ListMessagesResponse messagesResponse = request.execute();

request.setPageToken(messagesResponse.getNextPageToken());

        // Get ID of the email you are looking for
        String messageId = messagesResponse.getMessages().get(0).getId();

        Message message = service.users().messages().get(user, messageId).execute();
        
        

        // Print email body

        String emailBody = StringUtils
                .newStringUtf8(Base64.decodeBase64(message.getPayload().getParts().get(0).getParts().get(1).getBody().getData()));

        System.out.println("Email body : "   emailBody);   
}
}
 

Основной класс RegFirstCase

 package GmailAPIPackage;
import java.io.IOException;
import org.openqa.selenium.JavascriptExecutor;
import java.security.GeneralSecurityException;
import java.sql.DriverManager;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.WebDriverWait;
import static org.openqa.selenium.support.ui.ExpectedConditions.presenceOfElementLocated;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.repackaged.org.apache.commons.codec.binary.Base64;
import com.google.api.client.repackaged.org.apache.commons.codec.binary.StringUtils;
import com.google.api.services.gmail.Gmail;
import com.google.api.services.gmail.model.ListMessagesResponse;
import com.google.api.services.gmail.model.Message;

public class RegFirstCase extends GmailQuickstart{
    
public static void main(String[] args) throws GeneralSecurityException, IOException, InterruptedException {
    
System.setProperty("webdriver.chrome.driver", "C:\Program Files\Selenium\selenium-java-3.141.59\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("https:\www.casinosieger.com\en\register");
driver.manage().window().maximize();

int i = ThreadLocalRandom.current().nextInt(100000, 1000000);

driver.findElement(By.id("username")).sendKeys("Stefan"   i);
driver.findElement(By.id("email")).sendKeys("stefan.t "  i  "@condor-gaming.com");
driver.findElement(By.id("password")).sendKeys("Gordana1994");

Actions act =  new Actions(driver);
act.moveToElement(driver.findElement(By.id("terms"))).click().perform();

driver.findElement(By.id("is_of_legal_age")).click();
driver.findElement(By.id("register")).click();

Thread.sleep(5000);

GmailQuickstart.getToken();
System.out.println("Stigao dovde");
Pattern p = Pattern.compile("(https)://([\w_-] (?:(?:\.[\w_-] ) ))([[\w ,@?^=%amp;:/~ #-]*[\w@?^=%amp;/~ #-])?(token)(\=)([^"] )");  
Matcher m = p.matcher("token=(.*)");  
boolean b = m.matches();  
System.out.println(b);


}
}
 

Gradle file

 apply plugin: 'java'
apply plugin: 'application'

mainClassName = 'GmailQuickstart'
sourceCompatibility = 1.8
targetCompatibility = 1.8
version = '1.0'

repositories {
    mavenCentral()
    google()
}

dependencies {
    implementation 'com.google.api-client:google-api-client:1.24.1'
    implementation 'com.google.oauth-client:google-oauth-client-jetty:1.24.1'
    implementation 'com.google.apis:google-api-services-gmail:v1-rev95-1.24.1'
}
configurations.all {
    exclude group: 'com.google.guava:guava-jdk5:20.0' , module: 'guava-jdk5'
}
 

Сообщение об ошибке, когда guava 20 не была удалена непосредственно из папки:

 Exception in thread "main" java.lang.NoSuchMethodError: 'com.google.common.util.concurrent.SimpleTimeLimiter com.google.common.util.concurrent.SimpleTimeLimiter.create(java.util.concurrent.ExecutorService)'
    at org.openqa.selenium.net.UrlChecker.<init>(UrlChecker.java:62)
    at org.openqa.selenium.remote.service.DriverService.waitUntilAvailable(DriverService.java:197)
    at org.openqa.selenium.remote.service.DriverService.start(DriverService.java:188)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:79)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:181)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:168)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:123)
    at GmailAPIPackage.RegFirstCase.main(RegFirstCase.java:33)
 

Сообщение об ошибке после запуска зависимостей gradle:

 C:UsersStefan.TDesktopGmailApi>gradle dependencies
Starting a Gradle Daemon, 1 incompatible and 1 stopped Daemons could not be reused, use --status for details

FAILURE: Build failed with an exception.

* Where:
Build file 'C:UsersStefan.TDesktopGmailApibuild.gradle' line: 14

* What went wrong:
A problem occurred evaluating root project 'GmailApi'.
> Could not find method compile() for arguments [com.google.api-client:google-api-client:1.23.0] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 27s

C:UsersStefan.TDesktopGmailApi>
   
 

введите описание изображения здесь

Комментарии:

1. Не могли бы вы показать результат работы gradle dependencies ? guava-api-client-1.24.1 больше не следует включать guava-jdk5 , поэтому исключение, вероятно, не нужно, и просто перезаписи версии Guava до 25.0 должно быть достаточно.

2. Напишите свою конфигурацию здесь. Не ставьте скриншоты, я хочу сам все проверить, чтобы помочь вам, и я не могу копировать/вставлять с вашего скриншота, и я определенно не буду все перепечатывать, тем более, что при прочих равных условиях у вас может возникнуть проблема с опечаткой.

3. Прошу прощения, Оливье, я обновил свой вопрос.

4. Привет, Xaerxess, я добавил вывод к вопросу.

5. Пожалуйста, запустите команду gradle dependencies и предоставьте вывод здесь

Ответ №1:

Я нашел решение для этого, я создал новый проект Gradle с нуля(не по инструкциям Gmail отсюда: https://developers.google.com/gmail/api/quickstart/java#prerequisites и теперь все работает так, как и ожидалось. Я просто хочу добавить, что я не понимаю, почему Gmail не обновляет свои инструкции (они используют много не самых современных вещей), и из-за этого мы теряем нервы 😀