Новый для Maven, я пытался скомпилировать проект с использованием Maven с maven-shade-plugin (как кажется, лучший плагин для создания толстой банки там). Я попытался указать мой основной класс, чтобы создать исполняемый файл jar и некоторые .properties файлы, которые содержат строки перевода.Maven: скомпилируйте проект, используя теневой плагин, определяющий основной класс и файл свойств
Компиляция и сборка, кажется, прошло, по выходу Netbeans, но я не могу запустить его следующим образом («программу», предполагая, баночка построен Maven переименован):
/usr/bin/java -cp program.jar bot.Main
> could not find or load main class bot.Main
это мой файл проекта структура:
и это мой 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.mycompany</groupId>
<artifactId>mavenproject1</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<build>
<resources>
<resource>
<directory>src/main/java/resources</directory>
<includes>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>bot.Main</mainClass>
</manifest>
</archive>
<shadedArtifactAttached>true</shadedArtifactAttached>
<shadedClassifierName>launcher</shadedClassifierName>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>bot.Main</mainClass>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.telegram</groupId>
<artifactId>telegrambots</artifactId>
<version>2.4.0</version>
<classifier>jar-with-dependencies</classifier>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.5</version>
</dependency>
</dependencies>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
Правильно ли включены ресурсы и почему я не могу запустить свою программу с помощью команды java -jar без указания основного класса? Он говорит мне «недопустимый или поврежденный файл jar», который должен означать, что это невозможно.
Кроме того, почему ни один из них не задает основной путь класса?
спасибо! Но когда я пытаюсь запустить его, я получаю сообщение 'невозможно получить доступ к jarfile'. Это что-то еще связано с настройками плагина тени? – A7X
@ A7X Похоже, что вы не запускали команду 'java -jar' в нужном месте. JAR не находится в каталоге, в котором вы его запустили. Если вы находитесь в своем проекте, он находится в папке «target», а не в корневой папке. Однако это не связано с плагином Shade. – Tunaki
Да, это была моя вина. Кстати, я все еще получаю MissingResourceBundleException, не могу найти пакет для resources.strings locale en_US. Я включаю их в свой проект, используя 'ResourceBundle.getBundle (« resources.strings », новый Locale (« en »,« US »), загрузчик);' потому что я передаю неправильный путь к ресурсам? Должно быть, это полный путь? – A7X