Maven 打包可运行 jar

it2022-05-05  130

      为配合自动化部署hudson,最近研究了如何将eclipse maven工程打包成可运行的jar函数及对应的资源文件。      由于我们工程中包含了多个可运行的任务,在打包成jar时需要分别导出,pom提到版本库需要一致,不能部署一个任务提交一次代码。所以考虑了在进行mvn打包时通过传递参数控制导出jar中的main所在的类。在pom中定义properties,在执行命令时传递参数即可。如mvn package -DtaskFinalName=contentpoolurl -DmainClassName=com.ifec.blueair.task.contentpoolurl.ContentPoolUrlRun,另外在通过mvn导出jar找不到配置文件,发现没有找到当前目录,通过加入manifestEntries即可指定目录。maven生成的MANIFEST.MF中的Class-Path的内容缺少一些内容,比如当前执行目录(.),那么可以通过上面manifestEntries的方式增加进来。pom.xml内容如下:  <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>    <parent>        <groupId>com.ifec.blueair</groupId>        <artifactId>blueair-packagemanager</artifactId>        <version>0.0.1-SNAPSHOT</version>        <relativePath>../blueair-packagemanager/pom.xml</relativePath>    </parent>    <artifactId>blueair-task</artifactId>    <packaging>jar</packaging>    <name>blueair-task</name>    <url>http://maven.apache.org</url>    <properties>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <propertiesName>contentpoolurl</propertiesName>        <taskFinalName>contentpoolurl</taskFinalName>        <mainClassName>com.ifec.blueair.task.contentpoolurl.ContentPoolUrlRun</mainClassName>    </properties>        <build>        <finalName>${taskFinalName}</finalName>        <resources>            <resource>                <directory>src/main/resources</directory>                <includes>                    <include>**/*.sh</include>                    <include>**/${propertiesName}.properties</include>                    <include>**/log4j.properties</include>                    <include>**/config.properties</include>                </includes>                <filtering>true</filtering>                <targetPath>${project.build.directory}</targetPath>              </resource>        </resources>        <plugins>            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-jar-plugin</artifactId>                <configuration>                    <archive>                        <manifest>                            <addClasspath>true</addClasspath>                            <classpathPrefix>${taskFinalName}_lib</classpathPrefix>                            <mainClass>${mainClassName}</mainClass>                        </manifest>                        <!--maven生成的MANIFEST.MF中的Class-Path的内容缺少一些内容,比如当前执行目录(.),那么可以通过上面manifestEntries的方式增加进来。-->                        <manifestEntries>                              <Class-Path>.</Class-Path>                          </manifestEntries>                      </archive>                </configuration>            </plugin>            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-dependency-plugin</artifactId>                <executions>                    <execution>                        <id>copy</id>                        <phase>package</phase>                        <goals>                            <goal>copy-dependencies</goal>                        </goals>                        <configuration>                            <outputDirectory>                                ${project.build.directory}/${taskFinalName}_lib                            </outputDirectory>                        </configuration>                    </execution>                </executions>            </plugin>        </plugins>    </build>        <dependencies>        <dependency>            <groupId>org.quartz-scheduler</groupId>            <artifactId>quartz</artifactId>        </dependency>        <dependency>            <groupId>log4j</groupId>            <artifactId>log4j</artifactId>        </dependency>    </dependencies></project>

转载于:https://www.cnblogs.com/robertsun/p/5915640.html

相关资源:DirectX修复工具V4.0增强版

最新回复(0)