我在Maven中很新。
我试图做以下事项:
假设我们必须使用项目A和B.项目B需要使用从A导入的jar中的一些classfrom_A
以下是定义:
项目A的POM.xml:
<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>A_Group</groupId>
<artifactId>A_Artifact</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>A_Project</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
这是项目B的POM.xml(取决于A):
<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>B_Group</groupId>
<artifactId>B_Artifact</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>B_Project</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>A_Group</groupId>
<artifactId>A_Artifact</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
以下是项目B的代码片段:
import packageFromA.*;
public class App {
public static void main(String[] args) {
classFromA ca = new ClassFromA; //from packageFromA
ca.someFunction();
}
}
我为A运行mvn install,然后为B运行没有错误 但是当尝试从IntelliJ Idea运行上面的代码时,得到了错误: 错误:(3,18)java:package packageFromA不存在
正如我从maven docs所理解的那样:&#34;编译依赖项在所有类路径中都可用,并且它们是打包的#34;。但似乎导入的课程仍未解决。定义中缺少什么?提前致谢
更新:从IntelliJ运行时,问题在重新导入后得到解决。但是当我从命令行运行时
java projectB
我是否需要显式设置导入的jar的类路径?如果是,我是否需要指向我的本地maven存储库(.m2 /存储库)?谢谢
答案 0 :(得分:2)
在项目B的POM中,您可以为maven-jar-plugin添加配置,以生成包含类路径的MANIFEST文件:
<project>
...
<build>
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.5</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
...
</plugins>
</build>
</project>
这将在MANIFEST文件中设置classpath属性,该文件期望主jar的子目录lib/
中的所有dependend jar库。您需要在lib
目录中手动复制这些库。
要使用maven为所有dependend库分发您的应用程序,您可以使用maven assembly plugin。
希望它有所帮助!