我正在尝试创建一个.bat
文件来运行我生成的可执行JAR文件。我找到了创建.bat
文件的this方法来运行项目。所以,我读了插件here并将以下内容添加到我的pom.xml
。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<version>1.10</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>assemble</goal>
</goals>
</execution>
</executions>
<configuration>
<assembleDirectory>${assembleDir}</assembleDirectory>
<generateRepository>false</generateRepository>
<repositoryName>lib</repositoryName>
<configurationDirectory>conf</configurationDirectory>
<copyConfigurationDirectory>false</copyConfigurationDirectory>
<programs>
<program>
<mainClass>com.companyname.tests.TestRunner</mainClass>
<id>AutoConfigTest</id>
</program>
</programs>
</configuration>
</plugin>
而且,是的,顾名思义,这个JAR包含JUnit测试用例。
我阻止插件解压缩JAR并创建repo
文件夹并将其设置为我已生成的lib
文件夹,该文件夹包含所有JAR(可执行文件和依赖项)。正在生成.bat
文件,但在运行时,我收到以下错误。
Error: Could not find or load main class com.companyname.tests.TestRunner
另外,我希望命令提示符在执行后保留。在这种情况下,它立即关闭。也许是因为我收到了错误。我不确定。
所以,再次进行搜索并找到this。但正如接受的答案所示,我的pom.xml
已经包含 -
<packaging>jar</packaging>
汇编目录是 -
AutoConfigTest
|
|--bin
| `- contains the .bat file
|--conf
| `- contains the property files and other configuration files
|--lib
`- contains all the JARs
我在这里做错了什么?
答案 0 :(得分:1)
可能与(来自README.md)
有关项目本身的所有依赖项和工件都放置在已定义汇编目录中的生成的Maven存储库中。所有工件(依赖项+项目中的工件)都会添加到生成的bin脚本中的类路径中。
在pom.xml
中,您阻止生成该存储库。因此,您需要确保将项目中的工件复制到预期的位置。
假设有以下项目设置
<groupId>com.companyname</groupId>
<artifactId>Maven-AppAssembler</artifactId>
<version>0.0.1-SNAPSHOT</version>
工件应该在(脚本bin/AutoConfigTest
中的CLASSPATH设置)
"$REPO"/com/companyname/Maven-AppAssembler/0.0.1-SNAPSHOT/Maven-AppAssembler-0.0.1-SNAPSHOT.jar
$REPO
解析为target/appassembler/lib
。
答案 1 :(得分:0)
我发现了这个问题。 @SubOptimal指出主要类对批处理文件不可见是正确的。
由于某种原因,测试JAR文件(包含主类)未添加到批处理文件的classpath变量中。因此,每当我运行批处理文件时,我都会收到问题中提到的错误。
我回到文档并找到this。
有时会发生许多依赖关系,这意味着拥有一个非常长的类路径,并且变得太长(特别是在基于Windows的平台上)。此选项可以在这种情况下提供帮助。如果激活此选项,则类路径仅包含类路径通配符(
REPO/*
)。但请注意,这仅适用于Java 1.6及更高版本以及repositoryLayout
flat
。
因此,我没有将单个JAR文件添加到路径中,而是将整个lib
目录添加到类路径中,方法是将以下内容添加到pom.xml
。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>appassembler-maven-plugin</artifactId>
<version>1.10</version>
...
<configuration>
...
<repositoryLayout>flat</repositoryLayout>
<useWildcardClassPath>true</useWildcardClassPath>
...
</configuration>
...
</plugin>
我可以这样做,因为lib
的存储库布局已经是平坦的。没有等级制度。无需其他更改。批处理文件现在按预期运行。