Maven - импорт класса после добавления его в качестве зависимости - PullRequest
0 голосов
/ 18 апреля 2019

Я пытаюсь использовать (импортировать) класс, добавленный зависимостью моего проекта. Я добавил зависимость gson в свой файл pom.xml следующим образом:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.5</version>
</dependency>

И я побежал mvn install после этого. Теперь я могу найти зависимости jar в C:\Users\%Name%\.m2\repository\com\google\code\gson\gson\2.8.5, поэтому я предполагаю, что он установлен правильно.

Когда я пытаюсь импортировать класс Gson в Java, возникает несколько проблем:

  • Путь к импорту не com.google.code.gson, а com.google.gson, я не понимаю, почему.
  • Когда я компилирую с пакетом mvn, все работает гладко. Но если я пытаюсь запустить код с java -cp .\target\testJSON-1.0-SNAPSHOT.jar json.App, я получаю следующую ошибку, сообщающую, что класс Gson не найден:

    Exception in thread "main" java.lang.NoClassDefFoundError: com/google/gson/Gson at json.App.main(App.java:13) Caused by: java.lang.ClassNotFoundException: com.google.gson.Gson at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 1 more

Теперь из того, что я понял, ища решения: Пока maven знает зависимости проекта, java не знает. И мне нужно вручную добавить банку в путь к классам.

Итак, мои вопросы:

  • Если я потрудился сказать maven, что мне нужен gson для запуска моего проекта, зачем мне вручную включать все зависимости для его запуска? Есть ли способ автоматизировать эту вещь простым и интуитивно понятным способом?
  • Когда я ищу способы добавить несколько jar-файлов в путь к классам, единственные ответы, которые я нахожу, предполагают, что все jar-файлы находятся в одной папке, следовательно, предлагается сделать java -cp folder/*.jar. Файл jar, сгенерированный Maven, находится в целевой папке моего проекта, а файл gson - в папке .m2. Как добавить несколько банок (расположенных в разных местах) в classpath?

Спасибо,

Ответы [ 2 ]

3 голосов
/ 18 апреля 2019

Путь к импорту не com.google.code.gson

Код Google был закрыт в 2016 году, они изменили свои идентификаторы групп.

класс Гсона не найден

GSON JAR не на пути к классам.

Если я скажу maven, что мне нужен gson для запуска моего проекта, зачем мне вручную включить все зависимости для его запуска? Есть ли способ автоматизировать эту вещь в простой и интуитивно понятной манере?

Maven - это инструмент для сборки, и он успешно собрал ваше приложение. Java требует, чтобы вы включили JAR-файлы в classpath. Это не недостаток Maven. Если вы хотите объединить все зависимости в один JAR, который «просто запускается», тогда создайте толстый JAR .

Как добавить несколько банок (расположенных в разных местах) в classpath?

Если вы создаете толстый JAR-файл, вам не придется этого делать, но вы можете разделить записи пути к классам, например, так ( для ОС ):

java -cp folder/*.jar;another/folder/*.jar
1 голос
/ 18 апреля 2019

Возможно, вы захотите включить зависимости при создании jar с maven.Вы можете использовать плагин maven-Assembly,

 <build>
    <plugins>
      <!-- any other plugins -->
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
      </plugin>
    </plugins>
  </build>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...