自定义程序集描述符以创建具有依赖项的 jar

Bla*_*nca 1 maven-2 maven-assembly-plugin

我想从 Maven 中创建的项目生成一个 .jar 应用程序。

我在 Eclipse 中工作,我做了: run as/Maven assembly: assembly

这是错误消息:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.2-beta-4:assembly (default-cli) on project FeelIndexer: Error reading assemblies: No assembly descriptors found.
Run Code Online (Sandbox Code Playgroud)

这是我的assamble.xml

<assembly>
  <id>exe</id>
  <formats>
        <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
        <dependencySet>
          <outputDirectory></outputDirectory>
          <outputFileNameMapping></outputFileNameMapping>
          <unpack>true</unpack>
          <scope>runtime</scope>
          <includes>
            <include>commons-lang:commons-lang</include>
            <include>commons-cli:commons-cli</include>
          </includes>
        </dependencySet>
  </dependencySets>
  <fileSets>
        <fileSet>
          <directory>target/classes</directory>
          <outputDirectory></outputDirectory>
        </fileSet>
  </fileSets>
</assembly>
Run Code Online (Sandbox Code Playgroud)

我想我必须包含其他内容来添加 muy 项目的依赖项,但我不知道该怎么做!建议??

更新:在我的 assembly.xml 下方

<assembly>
      <id>exe</id>
      <formats>
        <format>jar</format>
      </formats>
      <includeBaseDirectory>false</includeBaseDirectory>
      <dependencySets>
        <dependencySet>
          <outputDirectory></outputDirectory>
          <outputFileNameMapping></outputFileNameMapping>
          <unpack>true</unpack>
          <scope>runtime</scope>
          <includes>
            <include>commons-lang:commons-lang</include>
            <include>commons-cli:commons-cli</include>
          </includes>
        </dependencySet>
      </dependencySets>
      <fileSets>
        <fileSet>
          <directory>target/classes</directory>
          <outputDirectory></outputDirectory>
        </fileSet>
      </fileSets>
    <plugins>
          <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.2-beta-5</version>
        <configuration>
          <descriptors>
            <descriptor>src/main/assembly/src.xml</descriptor>
          </descriptors>
        </configuration>
          </plugin>
    </plugins>
    </assembly>
Run Code Online (Sandbox Code Playgroud)

我在哪里可以找到我的 maven-assemble-plugin 配置?

我尝试了你告诉我的两种选择:

  • 使用预定义的 assembly.xml
  • 插入插件

我有同样的结果:s

Pas*_*ent 5

要使用自定义程序集描述符,您必须在插件配置中声明它:

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.2-beta-5</version>
        <configuration>
          <descriptors>
            <descriptor>src/main/assembly/src.xml</descriptor>
          </descriptors>
        </configuration>
        [...]
      </plugin>
   </plugins>
</project>
Run Code Online (Sandbox Code Playgroud)

顺便问一下,预定义的程序集不能jar-with-dependencies满足您的需求吗?我没有看到与您的自定义程序集有太大区别,我的建议是使用预定义的程序集:

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.2-beta-5</version>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
        [...]
     </plugin>
  </plugins>
</project>
Run Code Online (Sandbox Code Playgroud)

更新:我不明白你在做什么,我不确定你是否理解程序集插件的工作原理。

  1. Maven 程序集插件配置(上述示例,由 括起来<plugin>)位于 中pom.xml,而不是程序集描述符中。
  2. 如果您将 Maven 程序集插件配置为用作src/main/assembly/src.xml程序集描述符,则该文件必须存在(因此,要么重命名程序集描述符,要么更改配置,上面的示例只是......一个示例)。
  3. 据我所知,您不需要自定义程序集描述符。您可以简单地使用我在最初的答案中给出的第二个片段(将其放入您的pom.xml)。