Как настроить свойства подключаемых модулей maven в разделе «свойства»

#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 стал бесполезным из-за несуществующего класса, и отследить такую проблему практически невозможно.