我正在尝试使用maven为一个名为"logmanager"的小型家庭项目生成一个可执行jar,就像这样:
我将那里显示的代码段添加到pom.xml中,然后运行mvn assembly:assembly.它在logmanager/target中生成两个jar文件:logmanager-0.1.0.jar和logmanager-0.1.0-jar-with-dependencies.jar.当我双击第一个jar时出现错误:
Could not find the main class: com.gorkwobble.logmanager.LogManager. Program will exit.
Run Code Online (Sandbox Code Playgroud)
当我双击jar-with-dependencies.jar时出现稍微不同的错误:
Failed to load Main-Class manifest attribute from: C:\EclipseProjects\logmanager\target\logmanager-0.1.0-jar-with-dependencies.jar
Run Code Online (Sandbox Code Playgroud)
我复制并粘贴了路径和类名,并检查了POM中的拼写.我的主要类从eclipse启动配置启动.有人可以帮我弄清楚为什么我的jar文件不会运行?另外,为什么有两个罐开始?如果您需要更多信息,请与我们联系.
这是完整的pom.xml,供参考:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.gorkwobble</groupId>
<artifactId>logmanager</artifactId>
<name>LogManager</name>
<version>0.1.0</version>
<description>Systematically renames specified log files on a scheduled basis. Designed to help manage MUSHClient logging and prevent long, continuous log files.</description>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<!-- nothing here -->
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-4</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.gorkwobble.logmanager.LogManager</mainClass> …Run Code Online (Sandbox Code Playgroud) 我有一个简单的java maven项目.执行时我的一个类需要从类路径加载xml配置文件.我不想在生成jar时打包这样的xml文件但是我想在conf子文件夹下的zip程序集中包含一个默认的xml文件,我也希望在单元测试中可以使用这个默认的xml来测试它.
在我看来,这个默认的xml有两个可能的位置:
src/main/resources/conf/default.xmlsrc/main/conf/default.xml两种解决方案都需要特殊的pom动作
在解决方案1中,我在构建期间将自动复制到目标文件夹,这意味着它在测试中可用,但我也在生产的jar中得到它,我不想要它.
在解决方案2中,我得到了我想要的jar(没有xml)但我手动必须将xml复制到目标文件夹以供测试.(我不想在测试类路径中添加src的子文件夹.我认为这是不好的做法).
问题:两者的最佳解决方案是什么?
- 如果正确为2,将其复制到目标文件夹的最佳方法是什么?
- 有没有比这两个更好,更常见的其他解决方案?
(我还阅读了应该在哪里放置Maven项目的应用程序配置文件?但我想从"约定优于配置"的角度来了解最"正确的解决方案",这个链接提供了一些配置类型的解决方案,但没有任何约定但也许没有一个,但我还是要问.所提供的解决方案还包括AntRun插件和appAssembler插件,我想知道我是否可以完成它们.)
我正在使用Maven 3打包WAR文件,我无法弄清楚如何src/main/webapp从生成的最终WAR中排除文件.其中一个目录src/main/webapp是一个git子模块,我想在那个git子模块表单中排除像README,docs /等文件到我的最终WAR.
我最初的尝试是使用maven-antrun-plugin删除文件.我在prepare-package和中尝试了删除操作package,但都没有奏效.执行删除package操作从我的文件中删除了文件target/<projname>/...,但最终的WAR仍然包含文件.运行maven并-debug显示生成WAR文件后删除文件.这是几乎一样,如果我想要做的删除之间prepare-package和package.
我的下一次尝试是尝试指定要从WAR中排除的文件(下面链接的一些解决方案),但似乎没有任何效果.我可能没有正确指定不需要的文件的路径,我想知道它是否与我的不需要的文件不在src/main/resources,但在src/main/webapp.
我尝试了很多解决方案,但似乎没有任何效果.每次我尝试新的东西,我都会mvn clean删除target目录.最终生成的WAR文件始终包含不需要的文件.
我觉得我的问题的答案存在于我遇到的SO和谷歌搜索中,但我尝试过的任何东西都完全按照我的需要工作.以下是我尝试过的一些解决方案.