#java #eclipse
#java #eclipse
Вопрос:
Я пытаюсь скомпилировать свой проект maven, и я завишу от другого проекта (который является файлом jar). По какой-то причине, когда я пытаюсь скомпилировать, я получаю следующую ошибку, которая, по-видимому, заключается в том, что мой проект не может получить доступ к требуемым зависимостям проекта, от которого я зависю, хотя я не использую ни одну из этих зависимостей.
Вот ошибка http://hastebin.com/pebolozuxi.sql
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /C:/Users/cneth/Desktop/Developing/PrimeMC/PrimeMobWhacker/src/main/java/org/primemc/MobWhackerManager.java:[315,34] cannot access tech.rayline.core.plugin.RedemptivePlugin
class file for tech.rayline.core.plugin.RedemptivePlugin not found
[INFO] 1 error
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.892 s
[INFO] Finished at: 2016-10-07T14:56:20 03:00
[INFO] Final Memory: 25M/298M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.5.1:compile (default-compile) on project MobWhacker: Compilation failure
[ERROR] /C:/Users/cneth/Desktop/Developing/PrimeMC/PrimeMobWhacker/src/main/java/org/primemc/MobWhackerManager.java:[315,34] cannot access tech.rayline.core.plugin.RedemptivePlugin
[ERROR] class file for tech.rayline.core.plugin.RedemptivePlugin not found
Я знаю, что я могу легко зависеть от этой требуемой зависимости для решения проблемы, однако я не понимаю, зачем это было бы необходимо, поэтому я хочу решить эту проблему, не используя этот маршрут, если это возможно.
Спасибо!
Комментарии:
1. Вместо того, чтобы заставлять людей переходить по ссылке, вы могли бы опубликовать этот короткий фрагмент напрямую. Вы также можете опубликовать некоторый код, поскольку трудно определить только это сообщение и ваше очень короткое описание.
2. У вас есть доступ к исходному коду? Найдите этот класс tech.rayline.core.plugin. RedemptivePlugin, набрав ctrl shift t и введя RedemptivePlugin в breadcrump eclipse, отобразит связанные jar и версию
3. @Thomas Хорошо, извините. Я сделаю это в следующий раз. Обычно я это делаю, но эта ошибка выглядела немного раздражающей для чтения, когда я попытался опубликовать ее здесь.
4. Итак, что происходит в строке 315 MobWhackerManager.java ?
5. @Thomas Я вызываю метод из одной из моих зависимостей, которая зависит от содержащегося проекта
RedemptivePlugin.java
. (Публикация исходного кода больше не поможет, это буквально просто метод с нерелевантным именем). Мой проект явно не используетRedemptivePlugin.java
, однако проект, из которого я вызываю метод, использует. Означает ли это, что моему проекту нужен доступ кRedemptivePlugin.java
проекту?
Ответ №1:
Это не имеет ничего общего с Maven. Компилятор java хочет этот класс. MobWhackerManager.java:[315,34]
, на самом деле, хочет этот класс. Номер строки прямо там. Ваш код в строке 315 каким-то образом ссылается на этот класс.
Комментарии:
1. Итак, ссылка на класс, на который ссылается
RedemptivePlugin.java
, требуетRedemptivePlugin.java
, чтобы проект был зависимостью от моего проекта?2. Не видя кода на уровне 315 этого класса, я не могу разобраться с вами дальше. Но, в общем, если вы объявляете поле, вызываете метод, что угодно, да, компилятору нужно увидеть файл .class, чтобы сообщить, как его скомпилировать. возможно, вы вызываете что-то, что возвращает объект этого типа.
3.
PrimeSpawnerTiers.getInstance().getSpawnerTracker().getSpawnerMobs().dropLoot(event.getKilledEntity(), (stacked - newStacked) * getLootMultiplier(data));
4. Это строка, однако она довольно неуместна. Важно то, что сама зависимость
PrimeSpawnerTiers
зависит отRedemptivePlugin.java
, но мой проект напрямую не используетRedemptivePlugin.java
.5. Я просто
RedemptivePlugin.java
добавил jar к своим зависимостям, и это решило проблему. Я просто задал исходный вопрос в надежде, что есть лучший способ, но я не понимал, что мне нужны все ссылочные зависимости, доступные java. Спасибо за помощь, хотя 🙂
Ответ №2:
Попробуйте исключить ненужную транзитивную зависимость https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html
Ответ №3:
Ваша ошибка говорит о том, что компилятор пропускает класс tech.rayline.core.plugin.RedemptivePlugin
.
Поэтому вам, вероятно, нужно добавить jar с этим классом в ваши зависимости Maven.
Комментарии:
1. Я понимаю это, но мой исходный код ничего не импортирует из этого проекта. Я просто вызываю метод из одной из моих зависимостей, которая зависит от проекта, содержащего этот класс. Я собираюсь в конечном итоге добавить эту зависимость как одну из своих собственных, чтобы решить эту ошибку, но я надеялся, что есть лучший способ решить эту проблему.
2. В этом и есть суть: вам нужно иметь все классы, которые транзитивно используются вашим проектом, т. Е. Также Классы, которые используются классом, который используется классом, который используется вами. В противном случае вы не сможете скомпилировать. Но это именно то, для чего предназначены Maven или Gradle: автоматический сбор всех переходных зависимостей.
Ответ №4:
Из вашего последнего комментария я понимаю, что вам нужен jar, содержащий RedemptivePlugin, поэтому вы должны его сохранить. В худшем случае загрузите его вручную с правильной версией и поместите в свой .m2 с правильным путем
предыдущий ответ
Просто чтобы иметь возможность помочь:
вы проверили наличие нужного jar в вашем .m2?
Вы проверили все зависимости вашего проекта, чтобы точно указать, что вам не нужен jar, содержащий класс tech.rayline.core.plugin.RedemptivePlugin.
Если вы уверены в этом, попробуйте:
<dependencies>
<dependency>
<groupId>The Project Jar That Links You To RedemptivePlugin Jar</groupId>
<artifactId>Project</artifactId>
<version>TheVersion</version>
<exclusions>
<exclusion>
<groupId>The Jar containing RedemptivePlugin</groupId>
<artifactId>theJar</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
Комментарии:
1. Из вашего последнего комментария я понимаю, что вам нужен jar, содержащий RedemptivePlugin, поэтому вы должны его сохранить. В худшем случае загрузите его вручную с правильной версией и поместите в свой .m2 с правильным путем
2. Jar, от которого я зависю, на самом деле зависит от другого jar, который затемняется в jar RedemptivePlugin (немного длинная цепочка зависимостей, но должно быть понятно). Я просто надеялся, что у меня есть способ напрямую не зависеть от jar RedemptivePlugin, поскольку я напрямую не использую его в своем проекте. Однако я предполагаю, что это требуется для моего пути сборки, даже если я не использую его напрямую.