问题
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
.
来源:https://stackoverflow.com/questions/30542255/mule-maven-excluding-certain-mule-jars-while-creating-mule-runnable-jar