在我的
Khatami项目中,我使用maven来管理编译并将结果打包成一个可运行的工件:顶层的可执行shell脚本,bin /包含可执行jar及其依赖的jar.请看我的意思
here.
作为参考,这里是哈特米的pom.xml
的显着部分:
<plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptors> <descriptor>src/main/assembly/src.xml</descriptor> </descriptors> <archive> <manifest> <mainClass>${project.groupId}.Main</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin>
<assembly> <id>dist</id> <formats> <format>tar.gz</format> </formats> <dependencySets> <dependencySet> <outputDirectory>bin</outputDirectory> </dependencySet> </dependencySets> <fileSets> <fileSet> <directory>src/main/assembly</directory> <outputDirectory>/</outputDirectory> <includes> <include>khatami</include> </includes> <fileMode>744</fileMode> <lineEnding>unix</lineEnding> <filtered>true</filtered> </fileSet> </fileSets> </assembly>
和汇编尝试:
$mvn clean compile assembly:single [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building khatami 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ khatami --- [INFO] Deleting /home/blt/projects/com/carepilot/repos/khatami/target [INFO] [INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ khatami --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /home/blt/projects/com/carepilot/repos/khatami/src/main/resources [INFO] [INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ khatami --- [INFO] Compiling 1 source file to /home/blt/projects/com/carepilot/repos/khatami/target/classes [INFO] [INFO] --- maven-assembly-plugin:2.2-beta-5:single (default-cli) @ khatami --- [INFO] Reading assembly descriptor: src/main/assembly/src.xml [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.721s [INFO] Finished at: Mon Jul 18 13:58:30 EDT 2011 [INFO] Final Memory: 8M/123M [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.apache.maven.plugins:maven-assembly-plugin:2.2-beta-5:single (default-cli) on project khatami: Failed to create assembly: Error adding file 'com.carepilot.khatami:khatami:jar:1.0-SNAPSHOT' to archive: /home/blt/projects/com/carepilot/repos/khatami/target/classes isn't a file. -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors,re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions,please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
我在哪里有错?
解决方法
相关部分的错误信息是
Error adding file 'com.carepilot.khatami:khatami:jar:1.0-SNAPSHOT' to archive: /home/blt/projects/com/carepilot/repos/khatami/target/classes isn't a file.
它期待一个文件,它找不到它,因为包的目标没有运行后清理.
如果你做mvn clean编译包装配:单个它会构建成功.
<plugin> <artifactId>maven-assembly-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>single</goal> </goals> <configuration> <descriptors> <descriptor>src/main/assembly/src.xml</descriptor> </descriptors> <archive> <manifest> <mainClass>${project.groupId}.Main</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </execution> </executions> </plugin>
对您可以发布的配置进行上述更改.
mvn clean package
并且装配:单个目标将被自动执行.
更好的方法是使用maven-shade-plugin而不是手动执行此操作.