Как отфильтровать ресурс в Знатоке, заменяющем зависимости artifactId?

Я пытаюсь создать банку, которая имеет XML-файл как ресурс. Я хотел бы применить фильтр к этому xml для вставления имени зависимости в xml. Фильтрация работает, потому что я смог заглядывать ${project.build.finalName} и замените его. Я нашел одну подсказку, что свойство, которое я ищу, могло бы быть

${project.dependencies[0].artifactId}

но это, кажется, не работает. Я надеюсь заменять

${project.dependencies[0].artifactId}

с

OtherLibrary

Это возможно?

xml, который находится в src/main/resources:


  ${project.dependencies[0].artifactId}

pom.xml:



  4.0.0
com.foo
Thing
1.0-SNAPSHOT
Thing
http://maven.apache.org

    
        
            ${basedir}/src/main/resources
            true
        
    


    
        com.pts
        OtherLibrary
        1.0-SNAPSHOT
        provided
    
    
        junit
        junit
        3.8.1
        test
    


5
задан Community 23 May 2017 в 11:48
поделиться

2 ответа

Переполняется?

CAST(CHECKSUM(NEWID()) AS bigint) * CAST(100000 AS bigint) AS [ITEM]

CAST(CAST(CHECKSUM(NEWID()) AS bigint) * CAST(100000 AS bigint) % 2100000000 AS int) AS [ITEM]

Изменить:

Нет такой вещи, как 0% вероятность дублирования числа

CHECKSUM (NEWID ())) возвращает целое число, которое имеет 4 миллиардов строк. Парадокс дня рождения означает, что вероятность столкновения, конечно, намного выше.

Бигинт (выше) или десятичный (38,0) дают вам гораздо больше комнат для игры, но только уменьшают вероятность столкновения, но никогда не устраняют.

Но до сих пор не понимаю, почему вы пытаетесь ПРИСОЕДИНИТЬСЯ в уникальном случайном числе...

-121--3977923-

Я считаю, что это должно работать:

myObject = (MyAbstractClass)Activator.CreateInstance(null, childClassString);

null в первом параметре по умолчанию соответствует текущей исполняемой сборке. Для получения дополнительной информации: MSDN

edit: забыли привести к MyAbstractClass

-121--934617-

Черт возьми, вы правы, это свойство не заменяется во время фильтрации ресурсов. Это странно, и это звучит как ошибка в Maven Resources Plugin , потому что это свойство правильно интерполировано во время фазы process-resources , как я покажу в обходном решении, которое я предлагаю ниже (на основе maven-antrun-plugin и задачи replace ).

Сначала добавьте в POM следующее:

  <plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
      <execution>
        <phase>process-resources</phase>
        <configuration>
          <tasks>
            <echo>${project.dependencies[0].artifactId}</echo><!-- I'm a test -->
            <replace file="${project.build.outputDirectory}/myxmlfile.xml" 
                     token="@@@" value="${project.dependencies[0].artifactId}"/> 
          </tasks>
        </configuration>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

Затем обновите XML-файл в:

<somenode>
  <fileName>@@@</fileName>
</somenode>

С помощью этих изменений выполнение mvn process-resources приведет к следующему результату:

$ cat target/classes/myxmlfile.xml 
<somenode>
  <fileName>OtherLibrary</fileName>
</somenode>

Что доказывает интерполяцию свойства (но не набор во время maven-фильтрации ресурсов) 1 . При необходимости фильтрации нескольких файлов задача replace может принять набор файлов. Адаптируйте его в соответствии с вашими потребностями.

1 На самом деле, было бы неплохо создать новый Jira для этой ошибки в Maven 2 .x Ресурсы плагин . Я создал MRESOURCES-118 .

7
ответ дан 14 December 2019 в 04:37
поделиться

Индексированные свойства будут доступны только внутри конфигурации плагина из-за способа, которым Maven интерполирует POM, поэтому он доступен для задачи замены antrun, но не для фильтрации .

Однако доступ к зависимостям по индексу не очень надежен - он подвержен изменениям в родительском элементе. Вместо этого вы можете использовать следующее в pom.xml :

<properties>
  <fileName>some-name</fileName>
</properties>
...
<dependency>
  <groupId>your.group.id</groupId>
  <artifactId>${fileName}</artifactId>
  ...
</dependency>

Затем вы можете продолжить фильтрацию, используя имя свойства:

<somenode>
  <fileName>${fileName}</fileName>
</somenode>
1
ответ дан 14 December 2019 в 04:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: