所以我有以下问题:
我有一个maven项目,有几个maven-dependencies。当我运行mvn install
时,它将被打包为.jar,而.jar和.pom-File将被放置在我的maven-repository中。现在,这个.jar不包含其他依赖项(也不应该!)。现在,鉴于我已经在我的maven存储库中安装了所有需要的依赖项(显然maven将会处理),如何在命令行上运行此jar而不将类路径设置为指向maven-repository中的每个该死的jar ?还有其他方法吗? mvn exec:java
似乎只在maven-source目录中工作,它在那里查找" pom.xml"。但安装完成后," pom.xml"成为" name-version.pom"我有一个.jar而不是直接的源/类文件。有没有其他方法可以指出mvn exec:java
与maven存储库中的.jar和.pom-File一起使用?或者也许还有其他一些更好的方法吗?
提前致谢:)
EDIT1:我在这里只是将我的评论放在这里以避免进一步的误解:
我不想把依赖jar放在某个地方。我想使用已经处理过的存储库maven。理论上给出了我已经在我的本地maven存储库中已经需要的所有库。我希望能够下载任何其他maven项目,可能正在使用我已在本地存储库中安装的一些库,也使用" maven install"安装它,然后删除我下载的源和然后执行maven创建的.jar并告诉java或maven(取决于最佳方法)在我的本地maven存储库中查找该项目的依赖项。 我希望我说得足够清楚:)
编辑2:所以我决定使用mvn install
将项目安装到我的本地.m2 repo中,并将项目保存在一些已定义的文件夹中。然后我可以在这些项目中调用mvn exec:java
运行它们,maven将为我解决所有依赖关系。
答案 0 :(得分:0)
您可以排除某些您不希望加入项目的依赖项 -
<project>
...
<dependencies>
<dependency>
<groupId>sample.ProjectA</groupId>
<artifactId>Project-A</artifactId>
<version>1.0</version>
<scope>compile</scope>
<exclusions>
<exclusion> <!-- declare the exclusion here -->
<groupId>sample.ProjectB</groupId>
<artifactId>Project-B</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
有关详细信息,请查看link
答案 1 :(得分:0)
制作一个Jar可执行文件并使用maven定义类路径依赖关系可以使用maven-jar-plugin来创建一个清单文件。清单文件通常用于
例如
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifest>
<!-- It define the classpath dependencies -->
<addClasspath>true</addClasspath>
<classpathPrefix>dependency-jars/</classpathPrefix>
<!-- it makes the jar executable -->
<mainClass>com.mycompany.App</mainClass>
</manifest>
<!-- it define some entries about your artifact -->
<manifestEntries>
<Build-Maven>Maven ${maven.version}</Build-Maven>
<Build-Java>${java.version}</Build-Java>
<Build-OS>${os.name}</Build-OS>
<Build-Label>${project.version}</Build-Label>
</manifestEntries>
</archive>
</configuration>
</plugin>
当您运行命令mvn package | install时,将创建以下meta-inf / manifest.mf文件并将其添加到Jar中。
如果你需要依赖jar在某个地方,这可以很容易地完成,你将使用maven-dependency-plugin将项目依赖项复制到你想要的地方。您可以将项目构建目录复制到定义的清单前缀文件夹中
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/dependency-jars/
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
所有依赖项都在{project}/target/dependency-jars/
这种方法不包括对jar的任何依赖都将在你定义的某个地方的jar中出现。
您可以根据需要使用此方法配置项目
使用这种方法你只需要做mvn clean install并执行你的jar
我希望这种方法能够成为你需要的解决方案。