Mule: Maven excluding certain mule jars while crea

2019-09-08 23:40发布

问题:

Need to create a runnable jar of a mule service using maven-assembly plugin. Its creating a zip file but excluding certain mule jars. When trying to run it from console getting classnotfound exception for mule-core jar. How can i include these jars as well as create a jar rather than zip. Message on console while packaging using maven clean package command from anypoint studio maven plugin is

[INFO] Using exclusions definition for Mule ESB Server version 3.6.0
[INFO] Using as WTP server : null
[INFO] excluded: xerces:xercesImpl
[INFO] excluded: xml-apis:xml-apis
[INFO] excluded: commons-codec:commons-codec
[INFO] excluded: org.slf4j:slf4j-api
[INFO] excluded: org.mule:mule-core
[INFO] excluded: commons-cli:commons-cli
[INFO] excluded: com.lmax:disruptor
[INFO] excluded: org.apache.logging.log4j:log4j-api
[INFO] excluded: org.apache.logging.log4j:log4j-core
[INFO] excluded: org.apache.logging.log4j:log4j-slf4j-impl
[INFO] excluded: org.apache.logging.log4j:log4j-1.2-api
[INFO] excluded: org.apache.logging.log4j:log4j-jcl
[INFO] excluded: org.slf4j:jcl-over-slf4j
[INFO] excluded: org.apache.logging.log4j:log4j-jul
[INFO] excluded: org.mule.mvel:mule-mvel2
[INFO] excluded: org.mule.common:mule-common
[INFO] excluded: org.mule.modules:mule-module-client
[INFO] excluded: org.mule.modules:mule-module-spring-config
[INFO] excluded: org.mule.modules:mule-module-annotations
[INFO] excluded: org.mule.modules:mule-module-xml
[INFO] excluded: org.mule.modules:mule-module-cxf
[INFO] excluded: org.mule.modules:mule-module-spring-security
[INFO] excluded: org.mule.transports:mule-transport-http
[INFO] excluded: org.mule.transports:mule-transport-ssl
[INFO] excluded: org.mule.transports:mule-transport-tcp
[INFO] excluded: org.mule.modules:mule-module-http
[INFO] excluded: org.mule.modules:mule-module-spring-extras
[INFO] excluded: org.mule.modules:mule-module-builders
[INFO] excluded: org.mule.modules:mule-module-management
[INFO] excluded: org.mule.modules:mule-module-scripting
[INFO] excluded: org.mule.modules:mule-module-sxc
[INFO] excluded: org.mule.tests:mule-tests-functional
[INFO] excluded: org.mule:mule-core
[INFO] excluded: org.mule.transports:mule-transport-file
[INFO] excluded: org.mule.transports:mule-transport-jdbc
[INFO] excluded: org.mule.transports:mule-transport-jms
[INFO] excluded: org.mule.transports:mule-transport-vm

  Attached is Pom.xml and assembly.xml used for creating runnable jar.

POM.XML

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>in.gov.uidai</groupId>
    <artifactId>uidprnlettergenerator</artifactId>
    <packaging>mule</packaging> 
    <version>1.0.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <mule.version>3.6.0</mule.version>
        <eclipsePluginVersion>2.8</eclipsePluginVersion>
        <jdkName>JavaSE-1.6</jdkName>
        <jdk.version>1.6</jdk.version>
        <junit.version>4.9</junit.version>
        <uidpersistentmodel.version>3.5.14</uidpersistentmodel.version>
    </properties>

    <build>
        <!-- Use a newer version of the install plugin than what your Maven uses 
            by default. The older version failed to install the project if there was 
            no target/classes folder. Since we use mule packaging on the project we actually 
            create and attach the zip that must be installed. -->
        <pluginManagement>
            <plugins>
                <!-- <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-install-plugin</artifactId> 
                    <version>2.3.1</version> </plugin> This plugin's configuration is used to 
                    store Eclipse m2e settings only. It has no influence on the Maven build itself. 
                    <plugin> <groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId> 
                    <version>1.0.0</version> <configuration> <lifecycleMappingMetadata> <pluginExecutions> 
                    <pluginExecution> <pluginExecutionFilter> <groupId>org.mule.tools</groupId> 
                    <artifactId>maven-mule-plugin</artifactId> <versionRange>[1.6,)</versionRange> 
                    <goals> <goal>attach-test-resources</goal> <goal>filter-resources </goal> 
                    </goals> </pluginExecutionFilter> <action> <ignore /> </action> </pluginExecution> 
                    </pluginExecutions> </lifecycleMappingMetadata> </configuration> </plugin> -->
            </plugins>
        </pluginManagement>
        <plugins>
              <plugin>
                <groupId>org.mule.tools</groupId>
                <artifactId>maven-mule-plugin</artifactId>
                <version>1.9</version>
                <extensions>true</extensions>
                <configuration>
                    <copyToAppsDirectory>true</copyToAppsDirectory>
                    <inclusions>
                        <inclusion>
                            <groupId>org.mule.transports</groupId>
                            <artifactId>mule-transport-amqp</artifactId>
                        </inclusion>
                        <inclusion>
                            <groupId>org.mule.modules</groupId>
                            <artifactId>mule-module-objectstore</artifactId>
                        </inclusion>
                        <inclusion>
                            <groupId>org.mule</groupId>
                            <artifactId>mule-core</artifactId>
                        </inclusion>
                    </inclusions>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>${jdk.version}</source>
                    <target>${jdk.version}</target>
                    <encoding>ISO-8859-1</encoding>
                </configuration>
            </plugin>
            <!-- <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.2.1</version> 
                <configuration> <descriptorRefs> <descriptorRef>project</descriptorRef> </descriptorRefs> 
                </configuration> </plugin> -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>${eclipsePluginVersion}</version>
                <configuration>
                    <!-- by default download all sources when generating project files -->
                    <downloadSources>true</downloadSources>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>1.7</version>
                <executions>
                    <execution>
                        <id>add-resource</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>add-resource</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <resources>
                        <resource>
                            <directory>src/main/app/</directory>
                        </resource>
                        <resource>
                            <directory>src/main/api/</directory>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
            <!--  <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>java</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <mainClass>org.mule.MuleServer</mainClass>
                    <arguments>
                        <argument>-config</argument>
                        <argument>src/main/app/mule-config.xml</argument>
                    </arguments>
                    <classpathScope>compile</classpathScope>
                </configuration>
            </plugin>-->

            <!--Install clover-plugins -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.4</version>
                <!-- <executions> <execution> <id>copy-clover-plugins</id> <phase>validate</phase> 
                    <goals> <goal>copy</goal> </goals> <configuration> <overWriteReleases>true</overWriteReleases> 
                    <overWriteSnapshots>true</overWriteSnapshots> <overWriteIfNewer>true</overWriteIfNewer> 
                    <stripVersion>true</stripVersion> <outputDirectory>${project.build.testOutputDirectory}</outputDirectory> 
                    <artifactItems> <artifactItem> <groupId>com.cloveretl</groupId> <artifactId>cloveretl-engine</artifactId> 
                    <version>${mule.version}</version> <type>zip</type> </artifactItem> </artifactItems> 
                    </configuration> </execution> </executions> -->
            </plugin>
            <!-- <plugin> <artifactId>maven-antrun-plugin</artifactId> <version>1.7</version> 
                <executions> <execution> <phase>compile</phase> <configuration> <tasks> Using 
                an ant task to deflate cloveretl-engine.zip <unzip dest="${project.build.testOutputDirectory}" 
                src="${project.build.testOutputDirectory}/cloveretl-engine.zip" /> </tasks> 
                </configuration> <goals> <goal>run</goal> </goals> </execution> </executions> 
                </plugin> -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>jaxb2-maven-plugin</artifactId>
                <version>1.6</version>
                <executions>
                    <execution>
                        <id>xjc</id>
                        <goals>
                            <goal>xjc</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <schemaDirectory default-value="${project.basedir}/src/main/resources/schema" />
                    <bindingDirectory>${project.basedir}/src/main/resources/schema</bindingDirectory>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.5.4</version>
                <configuration>
                    <descriptors>
                        <descriptor>assembly.xml</descriptor>
                    </descriptors>
                    <archive>
                        <manifest>
                            <mainClass>in.gov.uidai.loader.PrintLetterGeneratorLoader</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id> <!-- this is used for inheritance merges -->
                        <phase>package</phase> <!-- bind to the packaging phase -->
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <!-- plugins for creating site reports -->
    <reporting>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-report-plugin</artifactId>
                <version>2.4.2</version>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <version>2.5</version>
                <configuration>
                    <configLocation>http://mulesoft.org/download/attachments/92/checkstyle.xml?version=1</configLocation>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pmd-plugin</artifactId>
                <version>2.5</version>
                <configuration>
                    <targetJdk>${jdk.version}</targetJdk>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>cobertura-maven-plugin</artifactId>
                <version>2.5</version>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>taglist-maven-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <tags>
                        <tag>TODO</tag>
                        <tag>@todo</tag>
                        <tag>FIXME</tag>
                        <tag>@fixme</tag>
                        <tag>@deprecated</tag>
                    </tags>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jxr-plugin</artifactId>
                <version>2.2</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>2.7</version>
                <configuration>
                    <source>${jdk.version}</source>
                    <links>
                        <link>http://java.sun.com/j2ee/1.4/docs/api</link>
                        <link>http://java.sun.com/j2se/1.4.2/docs/api</link>
                        <link>http://java.sun.com/j2se/1.5.0/docs/api</link>
                    </links>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>jdepend-maven-plugin</artifactId>
                <version>2.0-beta-2</version>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>findbugs-maven-plugin</artifactId>
                <version>2.3.2</version>
            </plugin>
        </plugins>
    </reporting>

    <!-- Third Party dependency <dependencies> <dependency> <groupId>com.sun.jersey</groupId> 
        <artifactId>jersey-client</artifactId> <version>1.19</version> </dependency> 
        </dependencies> -->


    <dependencies>
        <!-- Third Party dependency -->
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-client</artifactId>
            <version>1.19</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
        <dependency>
            <groupId>org.mule.modules</groupId>
            <artifactId>mule-module-objectstore</artifactId>
            <version>1.3.1</version>
        </dependency>
        <!-- Mule Dependencies -->
        <dependency>
            <groupId>org.mule</groupId>
            <artifactId>mule-core</artifactId>
            <version>${mule.version}</version>
            <scope>provided</scope>
        </dependency>
        <!-- Xml configuration <dependency> <groupId>com.mulesoft.muleesb.modules</groupId> 
            <artifactId>mule-module-boot-ee</artifactId> <version>${mule.version}</version> 
            <scope>provided</scope> </dependency> -->
        <!-- Xml configuration -->
        <dependency>
            <groupId>org.mule.modules</groupId>
            <artifactId>mule-module-spring-config</artifactId>
            <version>${mule.version}</version>
            <scope>provided</scope>
        </dependency>
        <!-- Xml configuration <dependency> <groupId>com.mulesoft.muleesb</groupId> 
            <artifactId>mule-core-ee</artifactId> <version>${mule.version}</version> 
            <scope>provided</scope> </dependency> <dependency> <groupId>com.mulesoft.muleesb.modules</groupId> 
            <artifactId>mule-module-data-mapper</artifactId> <version>${mule.version}</version> 
            </dependency> Xml configuration <dependency> <groupId>com.mulesoft.muleesb.modules</groupId> 
            <artifactId>mule-module-spring-config-ee</artifactId> <version>${mule.version}</version> 
            <scope>provided</scope> </dependency> -->

        <!-- Mule Transports -->
        <dependency>
            <groupId>org.mule.transports</groupId>
            <artifactId>mule-transport-file</artifactId>
            <version>${mule.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.mule.transports</groupId>
            <artifactId>mule-transport-jdbc</artifactId>
            <version>${mule.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.mule.transports</groupId>
            <artifactId>mule-transport-jms</artifactId>
            <version>${mule.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.mule.transports</groupId>
            <artifactId>mule-transport-vm</artifactId>
            <version>${mule.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- Mule Modules -->
        <dependency>
            <groupId>org.mule.modules</groupId>
            <artifactId>mule-module-client</artifactId>
            <version>${mule.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.mule.modules</groupId>
            <artifactId>mule-module-cxf</artifactId>
            <version>${mule.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.mule.modules</groupId>
            <artifactId>mule-module-management</artifactId>
            <version>${mule.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.mule.modules</groupId>
            <artifactId>mule-module-scripting</artifactId>
            <version>${mule.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.mule.modules</groupId>
            <artifactId>mule-module-sxc</artifactId>
            <version>${mule.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.mule.modules</groupId>
            <artifactId>mule-module-xml</artifactId>
            <version>${mule.version}</version>
            <scope>provided</scope>
        </dependency>
        <!-- for testing -->
        <dependency>
            <groupId>org.mule.tests</groupId>
            <artifactId>mule-tests-functional</artifactId>
            <version>${mule.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mockobjects</groupId>
            <artifactId>mockobjects-core</artifactId>
            <version>0.09</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <!-- <dependency> <groupId>com.cloveretl</groupId> <artifactId>cloveretl-engine</artifactId> 
            <version>3.5.2</version> <scope>test</scope> </dependency> -->
        <dependency>
            <groupId>org.mule.transports</groupId>
            <artifactId>mule-transport-amqp</artifactId>
            <version>3.4.4</version>
        </dependency>
        <!-- Other UIDAI project dependencies -->
        <dependency>
            <groupId>in.gov.uidai</groupId>
            <artifactId>uidpersistentmodel</artifactId>
            <version>${uidpersistentmodel.version}</version>
        </dependency>
        <dependency>
            <groupId>in.gov.uidai</groupId>
            <artifactId>uidplatform</artifactId>
            <version>3.5.17</version>
        </dependency>
        <dependency>
            <groupId>in.gov.uidai</groupId>
            <artifactId>uidplatformmodel</artifactId>
            <version>3.5.17</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>4.2.0.Final</version>
        </dependency>
    </dependencies>

    <repositories>
        <repository>
            <id>mulesoft-releases</id>
            <name>MuleSoft Releases Repository</name>
            <url>http://repository.mulesoft.org/releases/</url>
            <layout>default</layout>
        </repository>
        <repository>
            <id>mulesoft-snapshots</id>
            <name>MuleSoft Snapshots Repository</name>
            <url>http://repository.mulesoft.org/snapshots/</url>
            <layout>default</layout>
        </repository>
        <repository>
            <id>muleforge-releases</id>
            <name>MuleForge Snapshot Repository</name>
            <url>http://repository-master.mulesoft.org/releases/</url>
        </repository>
        <repository>
            <id>Central</id>
            <name>Central</name>
            <url>http://repo1.maven.org/maven2/</url>
            <layout>default</layout>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>mulesoft-release</id>
            <name>mulesoft release repository</name>
            <layout>default</layout>
            <url>http://repository.mulesoft.org/releases/</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>

</project>

assembly.xml

<assembly
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
    <id>jar-with-dependencies</id>
    <formats>
        <format>mule</format>
    </formats>

    <includeBaseDirectory>false</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <outputDirectory>/</outputDirectory>
            <directory>src/main/resources</directory>
            <includes>
                <include>uidprnlettergenerator.xml</include>
            </includes>
        </fileSet>
    </fileSets>
    <dependencySets>
        <dependencySet>
            <outputDirectory>/lib</outputDirectory>
            <useProjectArtifact>true</useProjectArtifact>
            <unpack>false</unpack>
            <scope>runtime</scope>
            <useTransitiveDependencies>true</useTransitiveDependencies>
            <!--  <excludes>
                <exclude>org.mule:mule-core</exclude>
                <exclude>org.mule.transports:mule-transport-*</exclude>
                <exclude>org.mule.modules:mule-module-*</exclude>
                <exclude>org.springframework:spring-*</exclude>
            </excludes>-->
        </dependencySet>
    </dependencySets>
</assembly>

回答1:

Mule applications are packaged as zip not jar archives. They are designed to be deployed on a Mule Standalone server, which provides all the Mule direct and transitive dependencies. This is why none of the Mule jars should go in the application zip. In fact, if you use only core transports and modules, an Mule application is very tiny: it contains only the configuration files and the Java classes, if any.

To produce an executable jar that doesn't need to be deployed on Mule Standalone, use the standard jar-with-dependencies in your maven-assembly-plugin config, ie. replace this:

<descriptors>
    <descriptor>assembly.xml</descriptor>
</descriptors>

with that:

<descriptorRefs>
    <descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>

You also need to remove the provided scope from the Mule dependencies in your pom.xml.