有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

windows无法找到或加载主类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没有指定主类

<?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

共 (3) 个答案

  1. # 1 楼答案

    很简单。加入maven pom。将有关主类和所需LIB的信息放入清单的xml说明。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—项目的名称

  2. # 2 楼答案

    由于TestRunner位于com.pkg.runner包中,因此首先尝试使用以下工具运行它:

    java -classpath . com.pkg.runner.TestRunner
    

    注意,当您运行java命令时,您必须是com文件夹中的一个以上的目录

    把结果写在这里

  3. # 3 楼答案

    您是否尝试过不使用:.,因为这看起来像一个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