JSt*_*oop 13 maven-2 maven-assembly-plugin
我很遗憾在这里听起来很无知,但我是Maven的新手,并且一直在抨击我肯定非常简单的事情.
该文件说:
[...]项目可以生成一个ZIP程序集,其中包含根目录中项目的JAR工件,lib /目录中的运行时依赖项以及用于启动独立应用程序的shell脚本.
这正是我想要做的!但我似乎无法实现它.
我的POM如下:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.anearalone</groupId>
<artifactId>myapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
[...]
<build>
<finalName>myapp</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>src/main/assemble/dist.xml</descriptor>
</descriptors>
<archive>
<manifest>
<mainClass>com.anearalone.myapp.CLI</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
[...]
</project>
Run Code Online (Sandbox Code Playgroud)
引用的dist.xml如下所示:
<assembly>
<id>dist</id>
<formats>
<format>zip</format>
</formats>
<files>
<file>
<outputDirectory>/</outputDirectory>
<source>src/main/bin/arkify.sh</source>
<fileMode>755</fileMode>
</file>
</files>
<dependencySets>
<dependencySet>
<useProjectArtifact>false</useProjectArtifact>
<includes>
<include>*:jar</include>
</includes>
<outputDirectory>/lib</outputDirectory>
</dependencySet>
<dependencySet>
<useProjectArtifact>true</useProjectArtifact>
<includes>
<include>com.anearalone:myapp:jar:0.0.1-SNAPSHOT</include>
</includes>
<outputDirectory>/</outputDirectory>
</dependencySet>
</dependencySets>
</assembly>
Run Code Online (Sandbox Code Playgroud)
这实现了我想要的zip文件布局(虽然我很确定我没有以正确的方式到达那里)但是我得到两个罐子target/
(一个在zip存档中,另一个在根目录中),并且都没有其中包括我的mainClass条目MANIFEST.MF
.
如果我project.packaging
改为"pom",我认为这可能是正确的,当然是额外的jar(在根本target/
消失,但我得到这些警告:
[WARNING] Cannot include project artifact: com.anearalone:myapp:pom:0.0.1-SNAPSHOT; it doesn't have an associated file or directory.
[WARNING] The following patterns were never triggered in this artifact inclusion filter:
o 'com.anearalone:myapp'
Run Code Online (Sandbox Code Playgroud)
......实际上我的工件不在存档中,并且仍然没有添加任何条目MANIFEST.MF
.
有人有时间帮助初学者吗?
如果我正确理解您的问题,您的ZIP是否已正确创建,但其中my-app-0.0.1-SNAPSHOT
包含的内容(以及直接位于target/
目录中的JAR )不包含MANIFEST.MF
文件中的主类?
实际上,该assembly
插件并不专用于执行此类任务.这是JAR插件的任务,它提供了一种在MANIFEST.MF
项目的主类中指示的方法.您只需在当前添加此配置pom.xml
:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
...
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>my.app.MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
Run Code Online (Sandbox Code Playgroud)
关于您尝试将项目的pom
包装更改为包装:这是一个坏主意;)实际上,pom
包装用于项目而没有任何其他资源而不是pom.xml
自身.它pom.xml
被定义为其他项目的父项或聚合多个模块非常有用.
归档时间: |
|
查看次数: |
11935 次 |
最近记录: |