使用未包含在此JAR中的maven-dependencies运行JAR

时间:2016-10-13 11:13:59

标签: java maven jar

所以我有以下问题:

我有一个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将为我解决所有依赖关系。

2 个答案:

答案 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

我希望这种方法能够成为你需要的解决方案。