使用MAVEN使用外部JAR制作JAR的问题

时间:2016-10-14 18:05:42

标签: java eclipse maven jar

我们和一位朋友一起为我们学校的项目工作,我们最终。 问题是,使用Eclipse,我们的java程序正常运行,并且也可以使用eclipse生成的JAR。但是,当你执行命令mvn package时,我们需要生成一个JAR。这个JAR找不到外部JAR的类,这是我们第一次使用Maven,所以请你帮我做一个好的pom.xml,当我们做mvn包时,它使用External JAR生成一个JAR ? 有pom:



<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>coo.project</groupId>
  <artifactId>COO-DONJON</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>COO-DONJON</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  
  <dependencies>

 	<dependency>
    	<groupId>junit</groupId>
    	<artifactId>junit</artifactId>
    	<version>4.12</version>
	</dependency>
	<dependency>
   		<groupId>javazoom</groupId>
    	<artifactId>jlayer</artifactId>
    	<version>1.0.1</version>
	</dependency>
  </dependencies>
  <build>
	<plugins>
		<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
				<executions>
					<execution>
						<id>copy-dependencies</id>
						<phase>prepare-package</phase>
						<goals>
							<goal>copy-dependencies</goal>
						</goals>
						<configuration>
							<outputDirectory>${project.build.directory}</outputDirectory>
							<overWriteReleases>true</overWriteReleases>
							<overWriteSnapshots>true</overWriteSnapshots>
							<overWriteIfNewer>true</overWriteIfNewer>
						</configuration>
					</execution>
				</executions>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-javadoc-plugin</artifactId>
			<version>2.10.4</version>
		</plugin>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-jar-plugin</artifactId>
			<version>3.0.2</version>
			<configuration>
				<archive>
					<manifest>
						<addClasspath>true</addClasspath>
						<mainClass>coo.project.App</mainClass>
					</manifest>		
				</archive>
			</configuration>
		</plugin>
	
	</plugins>
 </build>
</project>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

您必须使用Maven Assembly Plugin 你需要的是一个可执行jar,它应该包含你所有的依赖项。请查看下面的示例代码。

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
          <archive>
            <manifest>
              <mainClass>coo.project.App</mainClass>    // your main class here.
            </manifest>
          </archive>
        </configuration>
      </plugin>
    </plugins>
  </build>

这将产生两个罐子。其中一个将是一个普通的jar,第二个将是一个胖名称,附加-jar-with-dependencies的jar。这是你现在应该使用的罐子。这个胖jar将包含您的代码以及您的代码所需的所有依赖项。

如果你这样做,我认为你不必像pom.xml那样配置maven-dependency插件和maven jar-plugin。你可以忽略它。

答案 1 :(得分:0)

你需要使用Maven shade插件通过创建uber / fat jar来添加jar中的所有依赖项。

选中此http://howtodoinjava.com/maven/maven-shade-plugin-create-uberfat-jar-example/