#java #maven #pom.xml #maven-plugin #maven-jar-plugin
#java #maven #pom.xml #maven-плагин #maven-jar-plugin
Вопрос:
Чтобы настроить основной класс, объявленный в файле манифеста для плагинов jar и assembly, я должен открыть теги конфигурации в объявлении плагина, как в примере ниже:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.example.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
Мне пришлось бы сделать что-то подобное, чтобы настроить версию java, используемую плагином сборки:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
Но, как правило, чтобы избежать этих тегов конфигурации в разделе плагинов, чтобы pom.xml проще и приятнее для чтения, я настраиваю версию java, используемую в плагине компилятора Java, со следующими свойствами в разделе свойств:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
Можно ли таким же образом настроить основной класс, объявленный в файле манифеста, сгенерированном плагинами jar и assembly?
Проверка этой старой документации maven о плагине jar:https://maven.apache.org/archives/maven-1.x/plugins/jar/properties.html
Упоминается свойство «maven.jar.mainclass», я полагаю, что в какой-то момент можно было определить основной класс файла манифеста в разделе свойств проекта следующим образом:
<properties>
<maven.jar.mainclass>com.example.Main</maven.jar.mainclass>
</properties>
Но когда я пытаюсь запустить jar, созданный таким образом, я получаю сообщение об ошибке «нет основного атрибута манифеста, в example.jar «.
Итак, есть ли какой-либо способ настроить основной класс без необходимости открывать эти теги конфигурации непосредственно в разделе плагинов?
Ответ №1:
<properties>
<maven.jar.mainclass>com.example.Main</maven.jar.mainclass>
</properties>
…
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<mainClass>${maven.jar.mainclass}</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
Вы всегда можете использовать свои собственные заполнители в любом месте и указать их как свойство. Просто имейте в виду, что теперь значение больше не является константой, а стало переменной. Другими словами, теперь вы можете использовать mvn package -Dmaven.jar.mainclass=path.to.nonexstingClass
. Это мощно, но в этом случае ваш jar стал бесполезным из-за несуществующего класса, и отследить такую проблему практически невозможно.