我使用以下基本Maven命令生成了一个项目:
mvn archetype:generate -DgroupId=it.maven.project -DartifactId=MavenExample -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
该项目是正确创建的,我可以测试自动生成的App类,而没有任何问题的说明:
java -cp target/MavenExample-1.0-SNAPSHOT.jar:lib/* it.maven.project.App
稍后,我向POM添加了一些依赖项,获得了以下文件:
<?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>it.maven.project</groupId>
<artifactId>MavenExample</artifactId>
<version>1.0-SNAPSHOT</version>
<name>MavenExample</name>
<!-- FIXME change it to the project's website -->
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.10</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
最后,为了测试起见,我修改了之前由Maven自己生成的App类:
package it.maven.project;
import org.apache.commons.lang3.RandomStringUtils;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
System.out.println("Stringa generata casualmente: " + RandomStringUtils.random(16, true, true).toUpperCase());
}
}
一系列奇怪的事情发生了:
>
即使在POM中指定了较新版本的依赖项,但在.m2文件夹中,下载的版本似乎较旧(例如,commons-lang3的版本为2.1和2.5)
该项目按指令正确编译
MVN clean Install-u
当我再次运行命令执行App时,我得到以下异常:
线程“main”java.lang.noClassDeffounder中出现异常错误:org/apache/commons/lang3/randomstringutils at it.maven.project.app.main(app.java:13)原因:java.lang.ClassNotFoundexception:org/apache/commons/lang3/randomstringutils at java.net.urlClassLoader.findClass(urlClassLoader.java:382)at java.lang.ClassLoader.LoadClass(classLoader.java:424)at sun.misc.launcher
问题:
>
项目在编译时返回错误,这是怎么可能的?为什么应用程序中的导入被接受,但说明:
system.out.println(“Stringa generata casualmente:”+randomstringutils.random(16,true,true).ToupperCase());
生成异常?
我应该更正/执行什么以允许我的程序工作和正确使用依赖项?
当您创建一个简单的Java项目时,您在pom中定义了一组依赖项,但是如果您没有创建一个Java存档文件(ejb-jar或war),那么如果您运行在目标目录中编译的jar,那么所有的依赖项在运行时都是不可用的。有两种解决方案:
>
创建一个uber jar,在jar中包含所有依赖项:使用stackoverflow解决方案
从命令行运行jar时,必须将依赖项添加到类路径:
Java-cp“/path/dependencies/dep1.jar;/path/dependencies/dep2.jar”-jar myapp.jar
我创建了一个基于Maven的spring引导项目来探索如何使其在Websphere Application Server上运行。这是我需要排除spring-boot-starter-web的嵌入式Tomcat的方法。 我试过以下几件事: 为spring-boot-starter-tomcat添加了一个新的依赖项,其作用域为:provided(请参见在部署到JBOSS[spring-boot])时从
我有一个包含以下文件的Java项目: C:\MyProject\myPackage\MyTests.class C:\MyProject\lib\junit-platform-console-standalone-1.5.2.jar C:\MyProject\lib\other-library.jar MyTests 文件是使用 IDE 编译的,该 IDE 具有 junit-platform-co
在我的另一个工作区,对于我现有的项目,我没有这个问题。 有办法解决吗?
我有一个使用Spring的项目。它使用的是3.1.1版本,但是,由于某些原因,我真的不知道,有些spring工件与两个不同的版本是重复的。我在项目中的所有pom.xml文件中查找这些依赖项。我还使用dependecy插件来找出那些依赖项包含在哪里。 这里有输出的提取 据我所知,这意味着包含在中。 更新:似乎当我评论下一段代码时,罐子不包括在战争中。
src/main/resources/application.yml 来自Spring文档: 创建一个名为application.yml的文件并将其放在类路径的根目录中,还将snakeyaml添加到依赖项中(如果使用spring-boot-starter,Maven坐标org.yaml:snakeyaml已经包含在内)。 在这个问题上有人能帮我吗? pom.xml
问题内容: 我需要将项目的所有传递依赖项下载到命令行上的目录, 而没有 pom.xml文件或其他脚本。理想情况下,我将可以使用一个或两个命令来执行此操作。据我所知,这至少是mvn的两步过程。 将依赖项下载到本地存储库 将依赖项复制到lib目录 为了获得我运行的依赖 哪个很棒。不幸的是,目标参数对我没有帮助,因为它不会将所有可传递的依赖项放入目标中。 因此,现在我需要将该JAR文件及其所有传递依赖项