Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用额外的非基本文件和批处理文件构建基于非webapp maven2的项目_Java_Maven 2_Build Process_Build Automation - Fatal编程技术网

Java 使用额外的非基本文件和批处理文件构建基于非webapp maven2的项目

Java 使用额外的非基本文件和批处理文件构建基于非webapp maven2的项目,java,maven-2,build-process,build-automation,Java,Maven 2,Build Process,Build Automation,在移植我的一个简单项目时,我刚刚开始掌握maven2的设置。我已经浏览了这个项目,但是我有点困惑如何扩展和改变这个项目的包装。我试图找到更多关于这个主题的信息,但我认为我要么思考的问题不对,要么搜索的措辞不对 本质上,我想构建一个项目,它包含所有依赖项jar、主jar本身、为方便而启动它的批处理脚本,以及应用程序的其他各种文件(如属性文件等)。但是,我不想把这些都塞进罐子里。我想要一个项目的压缩归档构建,包含所有jar的lib目录,根目录包含属性文件和批处理脚本,可能还有子文件夹来保存额外的非必

在移植我的一个简单项目时,我刚刚开始掌握maven2的设置。我已经浏览了这个项目,但是我有点困惑如何扩展和改变这个项目的包装。我试图找到更多关于这个主题的信息,但我认为我要么思考的问题不对,要么搜索的措辞不对

本质上,我想构建一个项目,它包含所有依赖项jar、主jar本身、为方便而启动它的批处理脚本,以及应用程序的其他各种文件(如属性文件等)。但是,我不想把这些都塞进罐子里。我想要一个项目的压缩归档构建,包含所有jar的lib目录,根目录包含属性文件和批处理脚本,可能还有子文件夹来保存额外的非必要文件。有点像:

  • 示例-proj.zip:
    • 放松,蝙蝠
    • 小道具
    • 解放党
      • dependent1.jar
      • dependent2.jar
      • main.jar
    • 副处长
      • someextrafile.txt
使用maven2构建这样的项目的正确方法是什么?我是否需要创建一个构建zip并将子项目作为模块包含在内的父项目?这将只是一个简单的项目,不需要是多模块的…

它的作用正是您所描述的:创建shell脚本,并打包依赖项


但是我不相信它会将它们打包成zip/tar.gz/etc(appassembler只是将它们放入
target/appassembler
下的文件夹结构中。但是,您可以与appassembler一起使用打包输出-maven assembly在生成zip/jar/tar.gz/bzip2/whatever方面做得非常好,并且您可以使用XML描述符完全控制进入文件的内容。

Buil下面是一些如何使用引用插件的示例。注意,执行绑定到集成测试阶段,以确保在尝试打包之前已经创建了jar

将生成批处理/shell文件,下载依赖项(在本例中为lib目录),并将所有内容放在target/appassembler中

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>appassembler-maven-plugin</artifactId>
    <version>1.0</version>
    <executions>
      <execution>
        <id>assemble-standalone</id>
        <phase>integration-test</phase>
        <goals>
          <goal>assemble</goal>
          <!--if you only want to create the repo and skip script generation, 
             use this goal instead-->
          <!--goal>create-repository</goal-->
        </goals>
        <configuration>
          <programs>
            <program>
              <mainClass>name.seller.rich.Foo</mainClass>
              <name>foo</name>
            </program>
          </programs>
          <platforms>
            <platform>windows</platform>
            <platform>unix</platform>
          </platforms>
          <repositoryLayout>flat</repositoryLayout>
          <repositoryName>lib</repositoryName>
        </configuration>
      </execution>
    </executions>
  </plugin>

org.codehaus.mojo
可用于将appassembler输出打包到zip中:

<profiles>
  <profile>
    <id>archive</id>
    <build>
      <plugins>
        <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>2.2-beta-2</version>
          <executions>
            <execution>
              <phase>integration-test</phase>
              <goals>
                <goal>single</goal>
              </goals>
              <configuration>
                <descriptors>
                  <descriptor>src/main/assembly/archive.xml</descriptor>
                </descriptors>
              </configuration>
            </execution>
          </executions>
        </plugin>    
      </plugins>
    </build>
  </profile>
</profiles>

档案文件
maven汇编插件
2.2-β-2
集成测试
单一的
src/main/assembly/archive.xml
程序集描述符如下所示:

<assembly>
  <id>archive</id>
  <formats>
    <format>zip</format>
  </formats>
  <fileSets>
    <fileSet>
     <directory>${project.build.directory}/appassembler</directory>
     <outputDirectory>/</outputDirectory>
    </fileSet>
  </fileSets>
  <!-- add any other filesets to include docs, readmes, licences etc here -->
</assembly>

档案文件
拉链
${project.build.directory}/appassembler
/

这正是我想要的。我对它与集成测试阶段的绑定感到有点困惑,但我找到了答案:mvn集成测试-P存档谢谢!如果您运行mvn安装,集成测试阶段也将被执行。它只需要在打包后进行,以确保在打包应用程序之前构建jar老化。所以mvn安装-Parchive也可以。顺便问一下,为什么要排除组装阶段?如果激活,它不会生成bat文件——只复制LIB(忽略对文件夹名称的覆盖,但将其放平,这很奇怪)。我将其切换为仅汇编以获得正确的设置…这是一个复制粘贴错误。在我的应用程序中,我有自己的批处理文件要使用,而不是生成的批处理文件。我将更新帖子,谢谢。啊,谢谢你的帮助。我想我只是不明白我应该使用什么插件。此信息+Rich正是我想要的。比ks。