Maven为项目添加依赖项

时间:2016-10-25 11:02:10

标签: java maven jar dependencies

在eclipse中,您可以轻松地将依赖项(即JAR文件)添加到项目中。 右键单击该项目,然后单击 - >构建路径 - >添加库。

现在在项目中创建一个隐藏文件“.classpath”。 在这个文件里面添加了一个classpathEntry,现在我可以通过在java文件中添加它来使用这些库:

import foo.bar.*;

现在可以将此“应用程序”导出到单个jar中。

如何使用Maven和没有eclipse实现这一目标? 我切换到了emacs ...... :)

使用命令:

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-cli -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

我为自己做了一个示例启动应用程序。 在src文件夹中是一个App.java文件,在命令行上写着“hello World”。

在pom.xml中有以下内容我在项目中成功获得了一个jar(maven indedependent deployment):

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.10</version>
    <executions>
      <execution>
        <id>copy</id>
        <phase>package</phase>
        <goals>
          <goal>copy</goal>
        </goals>
        <configuration>
          <artifactItems>
            <artifactItem>
                     <groupId>com.mycompany.third-party</groupId>
         <artifactId>commons-cli-archetype</artifactId>
         <version>1.0-SNAPSHOT</version>
         <type>jar</type>
         <overWrite>false</overWrite>
         <!--${project.basedir}     ${project.build.directory} -->
         <outputDirectory>${project.basedir}/resources/repo</outputDirectory>
         <destFileName>optional-new-name.jar</destFileName>
            </artifactItem>
          </artifactItems>
          <outputDirectory>${project.basedir}/resources/repo</outputDirectory>
          <overWriteReleases>false</overWriteReleases>
          <overWriteSnapshots>true</overWriteSnapshots>
        </configuration>
      </execution>
    </executions>
  </plugin>

现在我如何在App.java中使用这个jar? 我是否必须手动创建.classpath文件? 如何自动安排我的课堂表格? 我一直在尝试使用classpassentries创建一个manifest.MF,但没有成功。我已经尝试了几个教程。

我没有成功:

     <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
      <includes>
    <include>${project.basedir}
    /resources/repo/optional-          new-name.jar</include>
      </includes>
    </configuration>
  </plugin>

 <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
    <archive>
        <manifest>
              <addDefaultImplementationEntries>true
   </addDefaultImplementationEntries>
            <addClasspath>true</addClasspath>
            <mainClass>your.main.Class</mainClass>



        </manifest>
        <manifestEntries>
          <Class-Path>${project.basedir}/resources/repo</Class-Path>

        </manifestEntries>

     <manifestFile>
    <!--
       ${project.build.outputDirectory}/META-INF/MANIFEST.MF

    -->
     ${project.basedir}/META-INF/MANIFEST.MF
         </manifestFile>

    </archive>

<!--
  <archive>
    <manifest>
      <mainClass>com.mkyong.core.App</mainClass>
    </manifest>
    </archive>
    -->


</configuration>

手动创建manifest.MF后。

命令之后

mvn clean install 

manifest.MF仍为空。

2 个答案:

答案 0 :(得分:1)

+1不使用eclipse; ^)

如果您希望引用其他JAR中的代码,请尝试将以下内容添加到您的POM中:

<dependencies>
    <dependency>
        <groupId>xxx</groupId>
        <artifactId>yyy</artifactId>
        <version>zzz</version>
    </dependency>
</dependencies>

其中xxx,yyy和zzz是您要导入的JAR的maven坐标。您可以从Nexus获取这些内容

修改:

因此,例如,如果您想要导入Joda时间,那将是

    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>2.6</version>
    </dependency>

如果您希望将所有依赖项的内容与代码组合在一起并将它们作为单个JAR发布,那么您可能需要查看maven-shade-plugin。见How to package a jar and all dependencies within a new jar with maven

另外一件事,你永远不应该使用.classpath文件。这是Eclipse特有的。改变它不会影响Maven,可能会混淆Eclipse

答案 1 :(得分:0)

知道了! 我按照本教程直到第5步。 http://www.mkyong.com/maven/maven-create-a-fat-jar-file-one-jar-example/

我没有做第5步,而是添加了:

   <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.3</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>shade</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

到pom。 瞧:

  mvn package

   java -jar target/dateutils.jar 

现在可行。

非常感谢你帮助Stormcloud! 所以发生了什么事?我的.jar仍然没有发现任何资源。 罐子被遮住了。 https://maven.apache.org/plugins/maven-shade-plugin/ 如果我想在没有maven的服务器上导出我的jar,该怎么办?那么如何导出一个完整的工作罐?

再次感谢!