Вопрос был отредактирован, ищите обновленные разделы и все разные способы, которыми я подошел, чтобы найти решение.
Начальный вопрос
Я попытался создать исполняемый файл JAR для моего проекта, но при попытке запустить его * я столкнулся с ошибкой no main manifest attribute, in kerkinibackend.jar
.
Проект представляет собой приложение Spring Boot, и я использую IntelliJ в качестве IDE.
Я пытался найти наиболее распространенные сценарии, когда это могло произойти из аналогичных вопросов, но я не смог сделать этоработать любым способом.
Я предпринял следующие шаги:
- Открыл IntelliJ.
- Открыл структуру проекта на правом верхнем значке.
- Перейдите к Артефакту.
- Нажмите плюс, чтобы добавить новый артефакт.
- JAR -> из модулей с зависимостями.(также пробовал использовать пустую опцию при наличии файла MANIFEST.MF, который был автоматически сгенерирован с первого раза, когда я попробовал).
- Открыл папку для класса Main во всплывающем диалоге и указалЭто.(также пытался оставить основной класс пустым, когда я где-то читал, и оставил его подключенным к нему через манифест).
- Оставил остальные по умолчанию.(таким образом IntelliJ также создает необходимый манифест, если он у вас уже есть, удаление файла позволит его сгенерировать заново)
- Затем я нажал Build -> Build Artifacts -> Build.
- Создан с размером 57Mbs.Я попытался запустить его как исполняемый файл, но увидел, что он не работает.Затем я открыл cmd и запустил
java -jar kerkinibackend.jar
, а затем появляется сообщение об ошибке.Дело в том, что файл MANIFEST.MF
фактически создается в src/main/java/META-INF
Manifest-Version: 1.0
Main-Class: com.teicm.kerkinibackend.KerkinibackendApplication
У меня также есть необходимая зависимость в pom.xml
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
ОБНОВЛЕНИЕ
Я исправил проблему, изменив вместо этого генерацию манифеста по умолчанию в ресурсах.
Теперь, когда Jar работает, но потом я получаю сообщение об ошибке от Spring No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.
Дальнейшее ОБНОВЛЕНИЕ
Я попытался добавить дополнительный файл spring.factories
(как чтение в другом ответе Актуальный вопрос-answer ) внутри папки META-INF в папке ресурсов для решения предыдущей проблемы.Теперь это не та же самая ошибка, а другая
00:24:26.230 [main] ERROR org.springframework.boot.SpringApplication - Application run failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Failed to determine a suitable driver class
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:767)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:218)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1308)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1154)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:391)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1288)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1127)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1083)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:853)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)
at com.teicm.kerkinibackend.KerkinibackendApplication.main(KerkinibackendApplication.java:11)
Но я не знаю, приближает ли это меня на шаг ближе или на шаг дальше.И почему источник данных MySQL не будет распознан.Когда я использую проект локально, все работает, он подключается к MySQL, имеет связь с внешним интерфейсом.
Попыткадругой метод сборки с использованием maven-assembly-plugin
Я также пытался использовать другой способ создания исполняемого файла jar, используя подход @Zsolt Tolvary
s (подробнее об этом можно узнать по link ).Этот подход использует в pom.xml другой плагин под названием maven-assembly-plugin
.
К сожалению, выполнение предложенных шагов генерирует файл JAR, но когда я пытаюсь запустить созданный JAR, который существует сейчас в папке /target
,тогда я получаю сообщение об ошибке Error: Could not find or load main class com.teicm.kerkinibackend.KerkinibackendApplication
, изменив, конечно, в плагине название основного класса:
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<finalName>KerkiniBackEnd</finalName>
<appendAssemblyId>false</appendAssemblyId>
<archive>
<manifest>
<mainClass>com.teicm.kerkinibackend.KerkinibackendApplication</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
Для любого, у кого есть свободное время, не стесняйтесь предложить мне решение или даже попробовать его сам.Мне действительно нужно его сгенерировать, это последняя часть моей диссертации ...
Ссылка на репозиторий Github: Репозиторий Github
Спасибо за ваше времяи усилия