maven 自动生成运行脚本插件appassembler-maven-plugin

本博客详细介绍了如何利用AppAssembler Maven Plugin来自动化生成跨平台的启动脚本和后台运行程序,简化了开发流程。通过配置插件,开发者可以轻松自定义生成的依赖文件、配置文件和运行脚本,同时提供了一个生成JWS(Java Web Start)配置的示例,进一步展示了AppAssembler的强大功能。

appassembler-maven-plugin可以自动生成跨平台的启动脚本,省去了手工写脚本的麻烦,而且还可以生成jsw的后台运行程序。

appassembler的配置比较简单,在pom.xml的配置文件加入插件配置。

比如说不同的启动脚本,可以如下配置

 

<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>appassembler-maven-plugin</artifactId>
				<version>1.2.1</version>
				<configuration>
					<configurationDirectory>conf</configurationDirectory>
					<configurationSourceDirectory>src/main/resources</configurationSourceDirectory>
					<copyConfigurationDirectory>true</copyConfigurationDirectory>
					<includeConfigurationDirectoryInClasspath>true</includeConfigurationDirectoryInClasspath>
					<assembleDirectory>${project.build.directory}/chj-search-client</assembleDirectory>
					<extraJvmArguments>-Xms128m</extraJvmArguments>
					<binFileExtensions>
						<unix>.sh</unix>
					</binFileExtensions>
					<platforms>
						<platform>windows</platform>
						<platform>unix</platform>
					</platforms>
					<repositoryName>lib</repositoryName>
					<programs>
						<program>
							<mainClass>com.chj360.search.client.App</mainClass>
						</program>
					</programs>
				</configuration>
			</plugin>

 

然后运行maven命令 :mvn package appassembler:assemble

就可以自动生成整个的依赖文件,配置文件和运行脚本了。

 

一些配置说明 

 

 

configurationDirectory:生成配置文件路径

configurationSourceDirectory:配置文件原路径,默认为src/main/config

assembleDirectory:整体包目录

extraJvmArguments:jvm参数

binFileExtensions:生成脚本的后缀

platforms:生成哪几种平台

repositoryName:依赖包目录,默认repo

programs:这个必须参数,启动的主class

 

 

生成jsw也是一个简单的配置

eg:

<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>appassembler-maven-plugin</artifactId>
				<version>1.2.1</version>
				<configuration>
					<repositoryLayout>flat</repositoryLayout>
					<repositoryName>lib</repositoryName>
					<includeConfigurationDirectoryInClasspath>true</includeConfigurationDirectoryInClasspath>
					<copyConfigurationDirectory>src/main/resources</copyConfigurationDirectory>
					<target>${project.build.directory}</target>
					<daemons>
						<daemon>
							<id>chj-search-client</id>
							<mainClass>com.chj360.search.client.App</mainClass>
							<commandLineArguments>
								<commandLineArgument>start</commandLineArgument>
							</commandLineArguments>
							<platforms>
								<platform>jsw</platform>
							</platforms>
							<generatorConfigurations>
								<generatorConfiguration>
									<generator>jsw</generator>
									<includes>
										<include>linux-x86-32</include>
										<include>linux-x86-64</include>
										<include>windows-x86-32</include>
										<include>windows-x86-64</include>
									</includes>
									<configuration>
										<property>
											<name>configuration.directory.in.classpath.first</name>
											<value>etc</value>
										</property>
										<property>
											<name>set.default.REPO_DIR</name>
											<value>lib</value>
										</property>
										<property>
											<name>wrapper.logfile</name>
											<value>../logs/wrapper.log</value>
										</property>
										<property>
											<name>run.as.user.envvar</name>
											<value>johndoe</value>
										</property>
									</configuration>
								</generatorConfiguration>
							</generatorConfigurations>
							<jvmSettings>
								<initialMemorySize>256M</initialMemorySize>
								<maxMemorySize>512M</maxMemorySize>
								<systemProperties>
									<systemProperty>java.security.policy=conf/policy.all</systemProperty>
									<systemProperty>com.sun.management.jmxremote</systemProperty>
									<systemProperty>com.sun.management.jmxremote.port=8999</systemProperty>
									<systemProperty>com.sun.management.jmxremote.authenticate=false</systemProperty>
									<systemProperty>com.sun.management.jmxremote.ssl=false</systemProperty>
								</systemProperties>
								<extraArguments>
									<extraArgument>-server</extraArgument>
								</extraArguments>
							</jvmSettings>
						</daemon>
					</daemons>
				</configuration>
				<executions>
					<execution>
						<id>generate-jsw-scripts</id>
						<phase>package</phase>
						<goals>
							<goal>generate-daemons</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
 

 

 

在使用 `appassembler-maven-plugin` 时,如果在 `<resource>` 标签中配置的资源被进行了二次 `filter` 处理,通常是因为 Maven 的资源过滤机制被多次激活,导致资源文件中的变量被替换多次,从而可能引发内容错误或不可预期的结果。为了解决这一问题,可以采取以下几种方式: 1. **关闭资源过滤功能**:可以在 `pom.xml` 中配置 `appassembler-maven-plugin` 插件时,将 `<filtering>` 设置为 `false`,以防止资源文件被二次处理。这种方式适用于不需要对资源文件进行变量替换的场景。[^4] ```xml <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>appassembler-maven-plugin</artifactId> <version>1.1.1</version> <configuration> <resources> <resource> <directory>src/main/resources</directory> <filtering>false</filtering> </resource> </resources> </configuration> </plugin> ``` 2. **调整资源目录结构**:通过将需要进行过滤处理的资源与不需要处理的资源放置在不同的目录下,可以更精细地控制哪些资源应该被处理,哪些不应该。这样做的好处是可以避免不必要的资源被错误地处理,同时也便于管理和维护。[^2] 3. **利用Maven Profiles**:通过定义不同的构建 profile,可以在不同环境下启用或禁用资源过滤功能。例如,在开发环境中启用过滤以便于测试,而在生产环境中关闭过滤以确保资源文件的完整性。 4. **自定义过滤规则**:对于特定的需求,还可以考虑编写自定义的过滤规则来替代Maven默认的过滤机制。这要求对Maven的内部工作原理有一定的了解,并能够编写相应的插件脚本来实现所需的功能。[^2] 通过上述方法之一或组合使用,可以有效地解决 `appassembler-maven-plugin` 中 `<resource>` 标签资源被二次 `filter` 的问题,从而保证构建过程的稳定性和资源文件的正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值