Я пытаюсь что-то сделать с помощью нового API Google Фото, но у меня возникают проблемы с определением того, какие зависимости maven следует включить. Поэтому я попытался написать простейшую из возможных программ Google Photos API:
Main.java:
package com.foo.eg.gphotos_plain;
import com.google.photos.library.v1.PhotosLibrarySettings;
public class Main {
public static void main(String[] args) {
PhotosLibrarySettings.Builder builder = PhotosLibrarySettings.newBuilder();
}
}
но получите ошибку компиляции:
Ошибка: (7, 78) Java: невозможно получить доступ к com.google.api.gax.rpc.ClientSettings
файл класса для com.google.api.gax.rpc.ClientSettings не найден
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.foo.eg</groupId>
<artifactId>gphotos-plain</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.google.photos.library</groupId>
<artifactId>google-photos-library-client</artifactId>
<version>1.1.0</version>
</dependency>
</dependencies>
</project>
Документация по https://developers.google.com/photos/library/guides/get-started-java документирует только одну необходимую зависимость: <artifactId>google-photos-library-client</artifactId>
.
Итак, я посмотрел на google-photos-library-client транзитивные зависимости, и он включает как минимум восемь с именами артефактов, такими как gax-grpc, grpc-protobuf, ... (посмотрите сами на https://search.maven.org/artifact/com.google.photos.library/google-photos-library-client/1.1.0/jar) НО все эти транзитивные зависимости имеют <scope>runtime</scope>
и, следовательно, не находятся в моем пути к классам компиляции и, следовательно, являются причиной ошибок компиляции.
Итак, мои вопросы:
1) Почему эти транзитивные зависимости не <scope>compile</scope>
, потому что, если бы они были maven, они занесли бы их в мой путь к классам компиляции? Почему я должен копировать все эти зависимости времени выполнения в мой pom.xml, чтобы просто изменить их на <scope>compile</scope>
?
2) Какие зависимости вы бы добавили в pom.xml, чтобы эта простая однострочная программа работала?