Я не могу напрямую редактировать любые свойства, которые уже существуют в разделе <properties>/<properties>
pom.xml
.
Однако , ответ, который я придумал, состоит в том, чтобы использовать плагин org.codehaus.gmaven.gmaven-plugin
для запуска сценария оболочки, редактирования вывода и сохранения его в переменной, которую можно использовать позже в pom.xml
файл. Обратите внимание, что его переменная фактически не определена нигде в файле, кроме как в разделе плагина org.codehaus.gmaven.gmaven-plugin
.
( Помещение пустой переменной в секцию <properties>/<properties>
pom.xml
всегда делает переменную пустой. )
Я использовал плагин org.codehaus.gmaven.gmaven-plugin
примерно так:
<plugin>
<groupId>org.codehaus.gmaven</groupId>
<artifactId>gmaven-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<properties>
<script>docker image inspect ${project.docker.image}:${project.version} --format='{{.Size}}</script>
</properties>
<source>
def command = project.properties.script
def process = command.execute()
process.waitFor()
def text = process.in.text.trim()
// Remove single quotes that surround number output
def number = text.substring(1, text.length()-1);
project.properties.dockerImageSize = number
</source>
</configuration>
</execution>
</executions>
</plugin>
Секция метаданных затем использует переменную следующим образом:
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.4.0</version>
<extensions>true</extensions>
<executions>
<execution>
<id>bundle-manifest</id>
<phase>process-classes</phase>
<goals>
<goal>manifest</goal>
</goals>
</execution>
</executions>
<configuration>
<instructions>
<Bundle-Category>Thing</Bundle-Category>
<Bundle-Activator>com.company.thing.impl.Activator</Bundle-Activator>
<Bundle-Vendor>${company.vendor}</Bundle-Vendor>
<Bundle-ContactAddress>${company.contactAddress}</Bundle-ContactAddress>
<Bundle-Copyright>${company.copyright}</Bundle-Copyright>
<Bundle-LicenseType>${company.licenseType}</Bundle-LicenseType>
<Bundle-Description>${company.description}</Bundle-Description>
<Bundle-DockerImageSize>${dockerImageSize}</Bundle-DockerImageSize>
<Import-Package>
com.company.thing.api*;version="[0.0.10,1.0.0)",
*
</Import-Package>
</instructions>
</configuration>
</plugin>