Невозможно ссылаться на файлы сценария DWL в Mule 4 dataweave из библиотек проектов (jar)

Недавно я разместил приложение mule в Maven Central Repo. Приложение содержит два файла java и файл dwl. Файл dwl использует эти java-файлы для выполнения некоторых операций. Это основное приложение (app1), на которое я хочу сослаться в другом приложении (app2) как на зависимость pom.

Имя основного - encryption-1.0.5-mule-application.jar.

Имя содержащегося в нем сценария dwl - encryption.dwl. Файлы Java доступны в пакете jar-файла /company.

Случай 1: если я упакую это основное приложение mule (app1) как jar и установлю приложение в свое локальное репозиторий .m2, а затем добавлю его как зависимость pom и общую библиотеку для mule-maven- плагин другого вторичного приложения mule (app2). Приложение 2 может распознать сценарий dwl и работает после развертывания.

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-clean-plugin</artifactId>
                <version>3.0.0</version>
            </plugin>
            <plugin>
                <groupId>org.mule.tools.maven</groupId>
                <artifactId>mule-maven-plugin</artifactId>
                <version>${mule.maven.plugin.version}</version>
                <extensions>true</extensions>
                <configuration>
                    <sharedLibraries>
                        <sharedLibrary>
                            <groupId>com.github.xyz</groupId>
                            <artifactId>encryption</artifactId>
                        </sharedLibrary>
                    </sharedLibraries>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>com.github.xyz</groupId>
            <artifactId>encryption</artifactId>
            <version>1.0.5</version>
        </dependency>
    <dependencies>

Случай 2: если я включу зависимость app1 в файл app2 pom.xml с областью видимости как <system>, включу в него ‹systemPath = jarfilelocation / app1.jar› и добавлю общую библиотеку, тогда jar добавляется в корневую папку app2, и при развертывании все работает.

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-clean-plugin</artifactId>
                <version>3.0.0</version>
            </plugin>
            <plugin>
                <groupId>org.mule.tools.maven</groupId>
                <artifactId>mule-maven-plugin</artifactId>
                <version>${mule.maven.plugin.version}</version>
                <extensions>true</extensions>
                <configuration>
                    <sharedLibraries>
                        <sharedLibrary>
                            <groupId>com.github.xyz</groupId>
                            <artifactId>encryption</artifactId>
                        </sharedLibrary>
                    </sharedLibraries>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>com.github.xyz</groupId>
            <artifactId>encryption</artifactId>
            <version>1.0.5</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/encryption-1.0.5-mule-application.jar</systemPath>
        </dependency>
    <dependencies>

Случай 3: если я включу app1 в качестве зависимости в app2 pom.xml с областью действия <provided> и добавлю общую библиотеку, jar-файлы будут загружены из восходящего потока и добавлены в библиотеки проекта app2. Но app2 не распознает сценарий dwl, доступный в библиотеках проекта. Без добавления области pom делает развертывание недействительным, что приводит к сбою.

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-clean-plugin</artifactId>
                <version>3.0.0</version>
            </plugin>
            <plugin>
                <groupId>org.mule.tools.maven</groupId>
                <artifactId>mule-maven-plugin</artifactId>
                <version>${mule.maven.plugin.version}</version>
                <extensions>true</extensions>
                <configuration>
                    <sharedLibraries>
                        <sharedLibrary>
                            <groupId>com.github.xyz</groupId>
                            <artifactId>encryption</artifactId>
                        </sharedLibrary>
                    </sharedLibraries>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>com.github.xyz</groupId>
            <artifactId>encryption</artifactId>
            <version>1.0.5</version>
            <scope>provided</scope>
        </dependency>
    <dependencies>

Моя цель - заставить app2 распознавать файл dwl app1 и все другие файлы, которые автоматически добавляются Studio в библиотеки проектов (PL) проводника пакетов mule app2, один раз после успешной загрузки jar-файлов с использованием зависимости pom, которую мы добавлен.

Я уже вижу все файлы app1, доступные под encryption-1.0.5-mule-application.jar в PL app2, которые были получены с использованием зависимости pom.

Тем не менее я не мог распознать эти файлы в XML-файле данных app2 mule. Мне нужна помощь в этом разобраться.

Примечание: я также включил всевозможные комбинации, используя файл mule-artifact.json.

{
    "name": "MyApp",
    "minMuleVersion": "4.3.0",
    "classLoaderModelLoaderDescriptor": {
        "id": "mule",
        "attributes": {
            "exportedPackages": [
                "company"
            ],
             "exportedResources": [
                "encryption/encryption.dwl",
                "encryption.dwl",
                "*/encryption.dwl",
                "company/encryption.dwl"
            ]
        }
    }
}

person Thinker-101    schedule 12.12.2020    source источник
comment
Мне любопытно. Вы публиковали свою библиотеку в центральном репозитории Maven или просто импортировали ее в локальный репозиторий Maven?   -  person aled    schedule 12.12.2020
comment
Я опубликовал его в центральном репозитории maven. Я могу вытащить эти файлы в app2 после добавления его в качестве зависимости pom. Он добавляется в библиотеки проектов app2.   -  person Thinker-101    schedule 12.12.2020


Ответы (2)


Я не думаю, что Studio распознает файлы внутри зависимости. Вам необходимо отредактировать исходный проект (например, app1).

Кстати, чтобы правильно упаковать приложение для совместного использования, вы можете прочитать https://help.mulesoft.com/s/article/How-to-add-a-call-to-an-external-flow-in-Mule-4.

person aled    schedule 12.12.2020
comment
Он смог распознать, как только я добавил банку в локальное репо .m2. Я могу распознать эти файлы, используя case1 и case 2. Не случай 3. - person Thinker-101; 12.12.2020

Я решил эту проблему.

Сначала я полагал, что <scope>provided</scope> каким-то образом вызывает проблему. Я не совсем понял концепцию прицелов. Я тоже пробовал передать <classifier>mule-application<classifier>. Не имело смысла, что классификатор не может быть указанного выше типа mule-application. Это стало известно, когда я попытался поиграть с классификатором как mule-plugin и переименовать банки локального репозитория, которые я ранее загрузил, и повторно развернуть свое приложение mule в студии.

Собственно проблема в названии баночки, которую я опубликовал в ОССРХ. Недопустимо упаковывать банку со значением mule-application. Как это <packaging>mule-application</packaging>

Позже я опубликовал выпуск с измененным файлом pom.xml, где для <packaging></packaging> установлено значение jar. Я также удалил mule-maven-plugin, поскольку он не позволяет упаковывать с типом jar. Примечание. Это приложение 1.

После публикации апстрима я просто сослался на сгенерированную зависимость Nexus для App1 в App2, и она работала нормально.

Теперь нет необходимости передавать зависимость общей библиотеки, как показано ниже, в App2. Также вам не нужно ничего добавлять в mule-artifact.json.

            <plugin>
                <groupId>org.mule.tools.maven</groupId>
                <artifactId>mule-maven-plugin</artifactId>
                <version>${mule.maven.plugin.version}</version>
                <extensions>true</extensions>
                <configuration>
                    <sharedLibraries>
                        <sharedLibrary>
                            <groupId>com.github.xyz</groupId>
                            <artifactId>encryption</artifactId>
                        </sharedLibrary>
                    </sharedLibraries>
                </configuration>
            </plugin>
person Thinker-101    schedule 14.12.2020