Как получить SuperPom Baseir в дочернем модуле POM? - PullRequest
14 голосов
/ 02 января 2012

Я хочу определить локальный репозиторий в моем проекте maven.

У меня есть супер-помпа и несколько дочерних модулей.Моя файловая структура:

/root
    /repository
    /child
        pom.xml
    pom.xml

в моем супер-помпе я определяю:

<repository>
    <id>my-local-repo</id>
    <url>file://${basedir}/repository</url>
</repository>

Проблема в том, что в моем дочернем pom репозиторий, определенный в моем супер-pom, относится к / root/ child / repository и так, не могут быть найдены зависимости ...

Есть ли способ определить путь всегда относительно суперпона?

Если нет, какой лучший способ решитьпроблема?

Ответы [ 3 ]

4 голосов
/ 02 января 2012

В этом случае сначала вы можете попробовать ${project.parent.basedir}.
Поскольку кажется, что это не работает, простой (и собственный) способ - использовать полный путь (/ root / ...) или попробовать относительныйпуть (../) вместо использования переменной $ {basedir}.

Но для меня отличным решением было бы преобразование этой конфигурации в файл свойств.
Вы можете использовать properties-maven-plugin (http://mojo.codehaus.org/properties-maven-plugin/plugin-info.html).

С помощью этого плагина свойства, определенные в файле свойств, могут быть прочитаны так же, как свойства, определенные в pom.xml.

С сайта плагина:

Если у вас есть файл свойствВызывается teams.properties с этим содержимым:

toronto=raptors
miami=heat

Это то же самое, что объявить в файле pom.xml следующее:

<properties> 
  <toronto>raptors</toronto>
  <miami>heat</miami>
</properties>
3 голосов
/ 02 января 2012

${project.parent.basedir} должен сделать работу.

Или вы можете установить basedir-путь корня в свойстве, чтобы оно было унаследовано. Как то так в Parent

<properties>
  <rootPath>${basedir}</rootPath>
</properties>

А у ребенка

<repository>
  <id>my-local-repo</id>
  <url>file://${rootPath}/repository</url>
</repository>
0 голосов
/ 12 мая 2015

Я решал это много раз с помощью отличного плагина. Добавьте файл под названием «basepath_marker» в каталог вашей супер-помпы и добавьте в вашу следующую. Вы можете получить доступ к свойству следующим образом: $ {base-path}. Прочитайте эту запись в блоге для более подробной информации.

Пример:

 ...
 <build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.gmaven</groupId>
            <artifactId>groovy-maven-plugin</artifactId>
            <executions>
                <!-- set absolute base path from super pom -->
                <execution>
                    <id>find-basepath</id>
                    <phase>validate</phase>
                    <goals>
                        <goal>execute</goal>
                    </goals>
                    <configuration>
                        <source>
                            <![CDATA[
                                import java.io.File;
                                log.info('## define projects super pom absolute path through basepath_marker')
                                String p = "basepath_marker";
                                File f = null;
                                if( p != null ) {
                                    def _max_child_poms = 0
                                    while( _max_child_poms++ < 5 ) {
                                        f = new File( p );
                                        if( f.exists() ) {
                                            break;
                                        }   
                                        p = "../" + p;                                 
                                    }
                                }
                                if( f != null ) {
                                    String basePath = f.getCanonicalPath();
                                    basePath = basePath.substring( 0, basePath.lastIndexOf( File.separator ) ); 
                                    project.properties['base-path'] = basePath.replace( '\\' , '/');
                                    log.info(' - used base path = ' + project.properties['base-path'] );
                                } else {
                                    log.error( 'Could not find basepath_marker marker file!' );
                                    System.stop( 0 );
                                }
                            ]]>
                        </source>
                    </configuration>
                </execution>                    
            </executions>
        </plugin>
    </plugins>
</build>
 ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...