четене на свойство от външен файл - Maven

Трябваше да прочета собственост, споделена от множество maven проекти, за тази цел се опитвам да използвам property-maven-plugin като:

<plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>properties-maven-plugin</artifactId>
            <version>1.0-alpha-1</version>
                <configuration>
                <files>
                    <file>conf.properties</file>
                </files>
            </configuration>
            <executions>
                <execution>
                    <phase>initialize</phase>
                    <goals>
                        <goal>read-project-properties</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        </plugins>
        </build>

<distributionManagement>
    <snapshotRepository>
        <id>snapshots</id>
        <url>${nexusurl}</url>
    </snapshotRepository>
</distributionManagement>
</project>    

и файлът conf.properties съдържа:

 nexusurl=http://localhost:8081/nexus/content/repositories/snapshots

проблемът е, че когато се използва mvn deploy, свойството nexusurl не е разрешено и полученото проследяване на грешка е:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy
(default- deploy) on project parent: Failed to deploy artifacts/metadata: No connector 
available to access repository snapshots (${nexusurl}) of type default using the 
available  factories WagonRepositoryConnectorFactory -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute
goal   org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on 
project  parent: Failed to deploy artifacts/metadata: No connector available to 
access repository snapshots (${nexusurl}) of type default using the available
factories WagonRepositoryConnectorFactory

Опитах се да променя фазата на изпълнение на плъгина (валидиране, инсталиране, разгръщане), променяйки версията на плъгина на 1.0-alpha-2, но проблемът продължава.

Ще бъда благодарен на всяка помощ. Благодаря,


person Amine    schedule 05.02.2013    source източник
comment
вашите conf.properties изглежда са игнорирани. Как се отнасяте? също какво се случва, ако стартирате mvn deploy -Dnexusurl=http://localhost:8081/nexus/content/repositories/snapshots?   -  person MrsTang    schedule 05.02.2013
comment
не, файлът със свойства не се игнорира, проблемът е какво описва чрез отговора на carlspring, Стойностите в секцията ‹properties› се присвояват, когато POM е първоначално зареден. Properties-maven-plugin засяга само изпълнения на плъгини, които идват след точката, в която свойствата са били заредени.   -  person Amine    schedule 05.02.2013


Отговори (1)


Проблемът е, че pom.xml се чете и интегрира със свойства много по-рано от зареждането на вашия плъгин. Можете да използвате приставката за стойности във вашата компилация - например между приставки, но това, което се опитвате да направите, няма да работи така.

person carlspring    schedule 05.02.2013
comment
може ли да имате предложение за предаване на свойствата по друг начин или плъгин? - person Amine; 05.02.2013
comment
Приставката няма да работи за вашия случай. Начинът, по който Maven интерполира свойствата в заредения POM модел, е това, което има значение. За да работи това, трябва да подадете променливата през командния ред (и едва ли виждам някаква полза да го правите по този начин). Трябва да запазите <distributionManagement/> URL твърдо кодиран в името на преносимостта. - person carlspring; 05.02.2013
comment
Логично е да имате определени неща като свойства, но това не е сред тях. - person carlspring; 05.02.2013
comment
Поставете <distributionManagement/> в родителски POM файл. След това го удължете. Това ще ви позволи да имате едно централно място за тази настройка. Много по-лесно за поддръжка и доста близо до това, което се опитвате да направите. - person carlspring; 05.02.2013
comment
Благодарим ви за отговора, като решение можем да поставим управлението на разпространението в родителски POM за всички проекти, това може да улесни поддръжката на списъка с твърдо кодирани свойства или да поставим списъка със свойства в раздел със свойства под settings.xml на maven - person Amine; 06.02.2013