Я пытаюсь создать банку, которая имеет 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
Переполняется?
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
Черт возьми, вы правы, это свойство не заменяется во время фильтрации ресурсов. Это странно, и это звучит как ошибка в 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 .
Индексированные свойства будут доступны только внутри конфигурации плагина из-за способа, которым 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>