Как часть сборки maven, как прочитать все файлы ресурсов из зависимостей в pom.xml

#java #maven

Вопрос:

Как часть сборки maven, как прочитать все файлы ресурсов из зависимостей в pom.xml. Постановка проблемы : У меня есть три зависимости в моей pom.xml файл и каждая зависимость имеют список xml-файлов в папке ресурсов, теперь я хочу прочитать все xml из всех зависимостей как часть сборки maven с использованием java, создать файл sing и сохранить по заданному пути.

 Example : pom.xml file.
```<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.test</groupId>
  <artifactId>merge</artifactId>
  <version>0.0.1-SNAPSHOT</version>
 <dependencies>
   <dependency>
     <groupId>com.test</groupId>
     <artifactId>first</artifactId>
     <version>1.0-SNAPSHOT</version>
   </dependency>
   <dependency>
     <groupId>com.test</groupId>
     <artifactId>second</artifactId>
     <version>1.0-SNAPSHOT</version>
   </dependency>
   <dependency>
     <groupId>com.test</groupId>
     <artifactId>three</artifactId>
     <version>1.0-SNAPSHOT</version>
   </dependency>
 </dependencies>
</project>```

Resource file in dependencies : 
In "first" dependency resources.
 /src/main/resources/test/first-1.xml
 /src/main/resources/test/first-2.xml
 /src/main/resources/test/first-3.xml

In "second" dependency resources.
  /src/main/resources/test/second-1.xml
  /src/main/resources/test/second-2.xml

In "three" dependency resources.
   /src/main/resources/test/three-1.xml
   /src/main/resources/test/three-2.xml

 Expected Output:
 It should combine all above xml files and create merge-all.xml file in "merge" jar.
 

Есть один root.xml файл, а затем скопируйте содержимое других xml — файлов и создайте новое имя xml-файла.
например :

  1. root.xml : первая банка
 <cache-config
 xmlns="http://xmlns.oracle.com/coherence/coherence-cache-config"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config/1.2/coherence-cache-config.xsd">
 <caching-scheme-mapping>
     <cache-mapping>
         <cache-name>local-cache</cache-name>
         <scheme-name>local-scheme</scheme-name>
     </cache-mapping>
 </caching-scheme-mapping>
 <caching-schemes>
     <local-scheme>
         <scheme-name>local-scheme</scheme-name>
         <eviction-policy>LRU</eviction-policy>
         <high-units>10</high-units>
         <expiry-delay>5s</expiry-delay>
     </local-scheme>
 </caching-schemes>
</cache-config> ```

2) one.xml : second jar

<?xml version="1.0"?>
<cache-config
xmlns="http://xmlns.oracle.com/coherence/coherence-cache-config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config/1.2/coherence-cache-config.xsd">
<caching-scheme-mapping>
<cache-mapping>
  <cache-name>one-cache</cache-name>
  <scheme-name>local-scheme</scheme-name>
</cache-mapping>
</caching-scheme-mapping>
<caching-schemes>

</caching-schemes>
</cache-config>

out.xml : the final generated out put.
<?xml version="1.0"?>
<cache-config
xmlns="http://xmlns.oracle.com/coherence/coherence-cache-config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config/1.2/coherence-cache-config.xsd">
<caching-scheme-mapping>
<cache-mapping>
  <cache-name>local-cache</cache-name>
  <scheme-name>local-scheme</scheme-name>
</cache-mapping>
<cache-mapping>
  <cache-name>one-cache</cache-name>
  <scheme-name>local-scheme</scheme-name>
</cache-mapping>
</caching-scheme-mapping>
<caching-schemes>
<local-scheme>
  <scheme-name>local-scheme</scheme-name>
  <eviction-policy>LRU</eviction-policy>
  <high-units>10</high-units>
  <expiry-delay>5s</expiry-delay>
</local-scheme>
</caching-schemes>
</cache-config>```
 

Комментарии:

1. Я думаю, для этого вам нужно написать плагин Maven.

2. Предположительно, вам нужно проанализировать XML-файлы, а не просто объединить их?

3. Если вы используете плагин сборки, вы можете создать containerDescriptorHandler для обработки файлов в зависимостях и добавления новых файлов.

4. не могли бы вы, пожалуйста, помочь мне с API-интерфейсами плагинов maven для чтения всех ресурсов из зависимостей.

5. Вам понадобится дескриптор сборки, который помещает эти XML-файлы в ваш конечный артефакт (см. maven.apache.org/plugins/maven-assembly-plugin/assembly.html ), а затем напишите containerDescriptorHandler для объединения xml-файлов (см. maven.apache.org/plugins/maven-assembly-plugin/examples/single/… ) Вы не ответили на мой вопрос выше о том, что вам на самом деле нужно сделать с XML-файлами.