Maven 2 是否有任何maven目标类似于';距离';?

Maven 2 是否有任何maven目标类似于';距离';?,maven-2,Maven 2,我正在做一个使用ant的项目。我有一个targetdist,它基本上首先执行jar,然后将应用程序安装到一个目录中 这意味着,它将在安装目录中创建目录,如bin/、lib/和config/,然后将相关文件复制到每个目录中 我的问题有两个方面: 有没有maven的进球能做到这一点 如果没有,我想做maven dist,并实现这一点。您建议我如何使用Maven来实现这一点 如果我不能有自己的“目标”(比如dist),那么最好的方法是什么 底线:我想做所有这些,但不想改变默认“目标”的行为,如编译和打

我正在做一个使用
ant
的项目。我有一个target
dist
,它基本上首先执行
jar
,然后将应用程序安装到一个目录中

这意味着,它将在安装目录中创建目录,如
bin/
lib/
config/
,然后将相关文件复制到每个目录中

我的问题有两个方面:

  • 有没有maven的进球能做到这一点
  • 如果没有,我想做
    maven dist
    ,并实现这一点。您建议我如何使用Maven来实现这一点
  • 如果我不能有自己的“目标”(比如dist),那么最好的方法是什么
  • 底线:我想做所有这些,但不想改变默认“目标”的行为,如编译和打包等。

    谢谢, jrh


    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>