Maven 2 是否有任何maven目标类似于';距离';?
我正在做一个使用Maven 2 是否有任何maven目标类似于';距离';?,maven-2,Maven 2,我正在做一个使用ant的项目。我有一个targetdist,它基本上首先执行jar,然后将应用程序安装到一个目录中 这意味着,它将在安装目录中创建目录,如bin/、lib/和config/,然后将相关文件复制到每个目录中 我的问题有两个方面: 有没有maven的进球能做到这一点 如果没有,我想做maven dist,并实现这一点。您建议我如何使用Maven来实现这一点 如果我不能有自己的“目标”(比如dist),那么最好的方法是什么 底线:我想做所有这些,但不想改变默认“目标”的行为,如编译和打
ant
的项目。我有一个targetdist
,它基本上首先执行jar
,然后将应用程序安装到一个目录中
这意味着,它将在安装目录中创建目录,如bin/
、lib/
和config/
,然后将相关文件复制到每个目录中
我的问题有两个方面:
maven dist
,并实现这一点。您建议我如何使用Maven来实现这一点PS:我正在使用maven版本
2.2.21
我不知道config
中会出现什么,但是lib
和bin
很容易
要做到这一点:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/dist/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
org.apache.maven.plugins
):
org.apache.maven.plugins
maven jar插件
${project.artifactId}
${project.build.directory}/dist/bin
啊,还有另外的要求:
一句话:我想做所有这些,但不想改变默认“目标”的行为,如编译和打包等
在这种情况下,我将使用配置文件来启用此功能:
<profile>
<id>dist</profile>
<build>
<plugins>
<!-- insert stuff from above here -->
</plugins>
</build>
</profile>
距离
现在,您可以执行mvn clean package-Pdist
来获取dist目录,如果不添加配置文件,则会获得默认行为
基本上,maven中的工作方式与ant中的工作方式不同。没有目标,只有生命周期阶段和插件目标
您可以执行一个生命周期阶段,该阶段将调用所有绑定到此阶段的所有maven插件目标(例如,如果您执行mvn编译
,将执行以下阶段:验证
,初始化
,生成源
,处理源
,生成资源
,编译
)。但是没有(简单)定义名为dist
的生命周期阶段的方法
或者您可以执行特定的插件目标(您可以实际执行多个阶段和/或插件目标)例如,您可以编写自己的dist插件,并使用mvn dist:dist
调用它,但我不建议这样做,因为您使用的是现有的功能,配置文件解决方案应该非常适合。您不能使用maven dist
,使用NetBeans(我相信还有其他IDE)您可以创建一个dist
,执行为mvn安装-Pdist
(或mvn clean package-Pdist
,如Sean所建议)。您可以尝试为编写一个(或在谷歌上搜索一个合适的)
像这样的
<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2
http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>dist</id>
<formats><format>zip</format></formats>
<fileSets>
<fileSet>
<directory>src/main/config</directory>
<outputDirectory>config</outputDirectory>
<useDefaultExcludes>true</useDefaultExcludes>
</fileSet>
</fileSets>
<files>
<file>
<source>${project.build.directory}/${project.artifactId}.jar</source>
</file>
</files>
<dependencySets>
<dependencySet>
<useProjectArtifact>false</useProjectArtifact>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
</assembly>
看起来assembly插件只会创建压缩文件,而不仅仅是将它们复制到dist
文件夹中。Seans的答案很好,在我发现appassembler插件之前,我差点就这么做了
请参见这里的示例
它被称为包生命周期的一部分
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>assemble</goal>
</goals>
</execution>
</executions>
<configuration>
<binPrefix>utility</binPrefix>
<assembleDirectory>${project.build.directory}/appassembler</assembleDirectory>
<extraJvmArguments>-Xms512m -Xmx1024m</extraJvmArguments>
<generateRepository>false</generateRepository>
<repositoryName>lib</repositoryName>
<repositoryLayout>flat</repositoryLayout>
<includeConfigurationDirectoryInClasspath>true</includeConfigurationDirectoryInClasspath>
<platforms>
<platform>windows</platform>
<platform>unix</platform>
</platforms>
<programs>
<program>
<mainClass>com.soebes.tools.cli.UtilityCLI</mainClass>
<name>utility</name>
</program>
</programs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/bin.xml</descriptor>
<descriptor>src/main/assembly/bin-unix.xml</descriptor>
<descriptor>src/main/assembly/src.xml</descriptor>
</descriptors>
<tarLongFileMode>gnu</tarLongFileMode>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
org.apache.maven.plugins
maven编译器插件
2.3.2
1.6
1.6
org.codehaus.mojo
appassembler maven插件
1.1
准备包装
集合
效用
${project.build.directory}/appassembler
-Xms512m-Xmx1024m
假的
解放党
平的
真的
窗户
unix
com.soebes.tools.cli.utilityli
效用
org.apache.maven.plugins
maven汇编插件
2.2
src/main/assembly/bin.xml
src/main/assembly/bin-unix.xml
src/main/assembly/src.xml
gnu
包裹
单一的
它引用的描述符非常严格,它还为您创建了一个批处理和shell脚本来运行您的应用程序!好的,那么这个操作将如何启动?我是否运行mvn package
?我想做一些类似maven dist
的事情,并实现这一点(在问题中更新了这个)…这可能吗?+1 hm,很有帮助。问题:我应该在包生命周期或部署中做我想做的事情吗?为什么?simpatico我想这应该是对问题的评论,而不是对我的答案的评论,对吗?
yourProjectName/
yourProjectName/config/...
yourProjectName/lib/...
yourProjectName/${project.artifactId}.jar
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>assemble</goal>
</goals>
</execution>
</executions>
<configuration>
<binPrefix>utility</binPrefix>
<assembleDirectory>${project.build.directory}/appassembler</assembleDirectory>
<extraJvmArguments>-Xms512m -Xmx1024m</extraJvmArguments>
<generateRepository>false</generateRepository>
<repositoryName>lib</repositoryName>
<repositoryLayout>flat</repositoryLayout>
<includeConfigurationDirectoryInClasspath>true</includeConfigurationDirectoryInClasspath>
<platforms>
<platform>windows</platform>
<platform>unix</platform>
</platforms>
<programs>
<program>
<mainClass>com.soebes.tools.cli.UtilityCLI</mainClass>
<name>utility</name>
</program>
</programs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/bin.xml</descriptor>
<descriptor>src/main/assembly/bin-unix.xml</descriptor>
<descriptor>src/main/assembly/src.xml</descriptor>
</descriptors>
<tarLongFileMode>gnu</tarLongFileMode>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>