无法找到或加载主 class java
Can not find or load main class java
我有这样的 bat 文件:
java -cp "./lib/*:." TestRunner
当我 运行 bat 文件时,我得到了
Can not load main class TestRunner
之前我有这样的命令:
java -cp .\lib\*;. TestRunner
和
java -cp .\lib\*;. com.pkg.TestRunner
同样的错误。
帮我理解一下。我用 maven 编译了所有源代码,所有源代码都存储在目标文件夹 target/src/java/main/com/pkg/TestRunner.class
中,所有未打包在 jar 中的文件刚刚编译,我想 运行 来自编译文件集的文件
也许 maven 不知何故没有指定 main class,
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.pkg</groupId>
<artifactId>automation</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<build>
<directory>target</directory>
<outputDirectory>target/classes</outputDirectory>
<finalName>AUTOMATION-01</finalName>
<testOutputDirectory>target/test-classes</testOutputDirectory>
<sourceDirectory>src/main/java</sourceDirectory>
<testSourceDirectory>src/test/java</testSourceDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<testResources>
<testResource>
<directory>src/test/resources</directory>
</testResource>
</testResources>
</build>
<reporting>
<outputDirectory>target/site</outputDirectory>
</reporting>
<profiles>
<profile>
<id>release-profile</id>
<activation>
<property>
<name>performRelease</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<inherited>true</inherited>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<inherited>true</inherited>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<updateReleaseInfo>true</updateReleaseInfo>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<dependencies>
<dependency>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.2.11</version>
</dependency>
</dependencies>
</project>
我的树:
\---target
+---classes
| +---com
| | +---example
| | | \---ru
| | | \---pkg
| | | \---webservices
| | | +---submission
| | | | \---submissionapi
| | | \---synchronisation
| | | \---syncsfdataapi
| | +---module
| | | +---ac
| | | | \---ws
| | | | \---tt
| | | | \---webservice
| | | | \---pc
| | | | \---quoting
| | | | \---quotingapi
| | | \---ws
| | | \---soapheaders
| | \---pkg
| | +---comparation
| | +---filters
| | +---model
| | +---runner
| | +---utils
| | \---ws
| \---data_request
| +---request
| \---responce
\---maven-status
\---maven-compiler-plugin
\---compile
\---default-compile
很简单。添加到 maven pom.xml 指令以将有关主要 class 和所需库的信息放入 MANIFEST.MF:
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.pkg.TestRunner</mainClass>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
执行打包后,您可以使用命令启动应用程序
java -jar project.jar
where project - 项目名称。
你试过不使用 :.
因为这看起来像 bash syntax 这意味着如果 .\lib\*
不存在则使用当前目录 .
如果您使用 windows,我建议您删除 :.
并尝试其中一种变体
java -cp "./lib/*" TestRunner
java -cp ".\lib\*" TestRunner
java -cp "lib\*" TestRunner
所有这些都使用相对路径。如果失败,您应该尝试使用完整路径:
java -cp "c:/some/folder/lib" TestRunner
java -cp "c:\some\folder\lib" TestRunner
更新:
试着转置这个抓取的例子here
D:\myprogram\
|
---> org\
|
---> mypackage\
|
---> HelloWorld.class
---> SupportClass.class
---> UtilClass.class
.
java -classpath D:\myprogram org.mypackage.HelloWorld
由于 TestRunner 位于 com.pkg.runner
包中,首先尝试 运行 它:
java -classpath . com.pkg.runner.TestRunner
请注意,当您执行 运行 java
命令时,您必须位于 com
文件夹的上一级目录。
在这里写下结果
我有这样的 bat 文件:
java -cp "./lib/*:." TestRunner
当我 运行 bat 文件时,我得到了
Can not load main class TestRunner
之前我有这样的命令:
java -cp .\lib\*;. TestRunner
和
java -cp .\lib\*;. com.pkg.TestRunner
同样的错误。
帮我理解一下。我用 maven 编译了所有源代码,所有源代码都存储在目标文件夹 target/src/java/main/com/pkg/TestRunner.class
中,所有未打包在 jar 中的文件刚刚编译,我想 运行 来自编译文件集的文件
也许 maven 不知何故没有指定 main class,
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.pkg</groupId>
<artifactId>automation</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<build>
<directory>target</directory>
<outputDirectory>target/classes</outputDirectory>
<finalName>AUTOMATION-01</finalName>
<testOutputDirectory>target/test-classes</testOutputDirectory>
<sourceDirectory>src/main/java</sourceDirectory>
<testSourceDirectory>src/test/java</testSourceDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<testResources>
<testResource>
<directory>src/test/resources</directory>
</testResource>
</testResources>
</build>
<reporting>
<outputDirectory>target/site</outputDirectory>
</reporting>
<profiles>
<profile>
<id>release-profile</id>
<activation>
<property>
<name>performRelease</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<inherited>true</inherited>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<inherited>true</inherited>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<updateReleaseInfo>true</updateReleaseInfo>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<dependencies>
<dependency>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.2.11</version>
</dependency>
</dependencies>
</project>
我的树:
\---target
+---classes
| +---com
| | +---example
| | | \---ru
| | | \---pkg
| | | \---webservices
| | | +---submission
| | | | \---submissionapi
| | | \---synchronisation
| | | \---syncsfdataapi
| | +---module
| | | +---ac
| | | | \---ws
| | | | \---tt
| | | | \---webservice
| | | | \---pc
| | | | \---quoting
| | | | \---quotingapi
| | | \---ws
| | | \---soapheaders
| | \---pkg
| | +---comparation
| | +---filters
| | +---model
| | +---runner
| | +---utils
| | \---ws
| \---data_request
| +---request
| \---responce
\---maven-status
\---maven-compiler-plugin
\---compile
\---default-compile
很简单。添加到 maven pom.xml 指令以将有关主要 class 和所需库的信息放入 MANIFEST.MF:
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.pkg.TestRunner</mainClass>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
执行打包后,您可以使用命令启动应用程序
java -jar project.jar
where project - 项目名称。
你试过不使用 :.
因为这看起来像 bash syntax 这意味着如果 .\lib\*
不存在则使用当前目录 .
如果您使用 windows,我建议您删除 :.
并尝试其中一种变体
java -cp "./lib/*" TestRunner
java -cp ".\lib\*" TestRunner
java -cp "lib\*" TestRunner
所有这些都使用相对路径。如果失败,您应该尝试使用完整路径:
java -cp "c:/some/folder/lib" TestRunner
java -cp "c:\some\folder\lib" TestRunner
更新:
试着转置这个抓取的例子here
D:\myprogram\
|
---> org\
|
---> mypackage\
|
---> HelloWorld.class
---> SupportClass.class
---> UtilClass.class
.
java -classpath D:\myprogram org.mypackage.HelloWorld
由于 TestRunner 位于 com.pkg.runner
包中,首先尝试 运行 它:
java -classpath . com.pkg.runner.TestRunner
请注意,当您执行 运行 java
命令时,您必须位于 com
文件夹的上一级目录。
在这里写下结果