我已阅读以前发布的问题.有些是模糊的,没有一个解决我的问题,所以我不得不再问.
我有两个简单的课程,
package One;
import One.Inner.MyFrame;
public class test
{
public static void main(String args[])
{
MyFrame f= new MyFrame();
}
}
Run Code Online (Sandbox Code Playgroud)
而另一类是,
package One.Inner;
import java.awt.*;
import javax.swing.*;
public class MyFrame extends JFrame
{
public MyFrame()
{
setPreferredSize(new Dimension(400,560));
setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
我在Windows cmd中的基本文件夹"基本".我编译使用
basic> javac *.java -d .
Run Code Online (Sandbox Code Playgroud)
创建文件夹和子文件夹.
cd One
basic\One> java test
Run Code Online (Sandbox Code Playgroud)
这会产生一大堆错误.许多答案旨在指定不起作用的完整路径.我的类在One中,因此指定一个使用-cp也不起作用.
我有一个 Gradle 项目(例如,MyProject),它有一个 main 方法,我只想用它来运行一个小型 Java 应用程序。比如说,脚本位于一个类和包中,如下所示:
MyScript.Java
package com.car.ant;
import com.3rdparty.library.LibraryException;
public class MyScript {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
Run Code Online (Sandbox Code Playgroud)
我用 构建项目$ ./gradlew clean build,没问题。我试图通过命令行运行它,但是当我这样做时,我在尝试运行时遇到异常:
$ pwd
~/workspace/MyProject/build/classes/java/main
$ java com.car.ant.MyScript
Exception in thread "main" java.lang.NoClassDefFoundError: com/3rdparty/library/exception/LibraryException
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
... 7 more
Run Code Online (Sandbox Code Playgroud)
该脚本不是应用程序的主要部分,但我只是希望它偶尔运行一次,并且我想弄清楚如何通过命令行运行它。有没有办法在不导入更多库的情况下做到这一点?我见过用一罐子完成的工作,但我想我可以不用一罐子也能做到这一点。
更新:
阅读本文后尝试添加类路径,但现在我收到了不同的错误:
$ java -cp com/3rdparty/library/exception/LibraryException com.car.ant.MyScript
Error: Could not find or load main class com.car.ant.MyScript
Run Code Online (Sandbox Code Playgroud) 我假设需要额外的依赖项,但我不明白到底是什么。我感谢大家的帮助。
我的pom文件是:
<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.spark</groupId>
<artifactId>spark</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<name>M101J</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>com.sparkjava</groupId>
<artifactId>spark-core</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.19</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.6.4</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>Spark repository</id>
<url>http://sparkjava.com/nexus/content/repositories/spark/</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.spark.SparkHomework</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
</project>
Run Code Online (Sandbox Code Playgroud)
当我尝试使用命令运行我的项目时:
mvn compile exec:java -Dexec.mainClass=com.spark.SparkHomework
Run Code Online (Sandbox Code Playgroud)
我有这样的问题:
未知的生命周期阶段“.mainClass=com.spark.SparkHomework”。您必须以 : 或 :[:]: 格式指定有效的生命周期阶段或目标。可用的生命周期阶段有:验证、初始化、生成源、处理源、生成资源、处理资源、编译、处理类、生成测试源、处理测试源、生成测试资源、处理-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, …
我有一个使用 Maven“快速启动”模板构建的 java 项目。结构看起来像
src
main
java
myapp
HelloWorld.java
Run Code Online (Sandbox Code Playgroud)
HelloWorld.java 被声明在包“myapp”下
在 pom.xml 中,仅包含 junit。
现在,在运行 Maven 编译后,我在下面得到了一个类文件
target
classes
myapp
HelloWorld.class
Run Code Online (Sandbox Code Playgroud)
但在我 cd 到 target/classes/myapp 后,然后执行
java -cp . HelloWorld
Run Code Online (Sandbox Code Playgroud)
我得到 NoClassDefFoundError,我按照如何从命令行执行 java .class 进行操作
我试过
java -cp . myapp.HelloWorld (myapp is the package)
Run Code Online (Sandbox Code Playgroud)
我仍然得到“无法找到或加载主类”
我的问题是:我使用“-cp .”设置类路径,那么为什么我仍然无法运行该类?和Maven有什么关系吗?
我知道我不需要使用命令行,我只是好奇。
java ×4
command-line ×2
maven ×2
classpath ×1
exception ×1
gradle ×1
javac ×1
main-method ×1
package ×1
powershell ×1