我是Java世界的新手。我使用了依赖Math.jar和Special.jar,我编写了一个Main方法。那些Math.jar和Special.jar是从终端创建的,因此它们没有版本号。在构建项目时,它显示错误,找不到依赖项的版本号。那么我的pom.xml应包含什么呢。另外,如果有任何一步一步的教程在jar中创建jar并使其可执行,那将会有很大帮助。如果有任何不同的工具可用,请解释。先感谢您。这是它显示错误的部分,因为罐子没有版本号,1.0是我选择的随机数。我也在使用Intellij idea / Eclipse / terminal。因此,IDE或终端可以实现的任何解决方案都可以
'
<dependencies>
<dependency>
<groupId>Math</groupId>
<artifactId>Math</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>Special</groupId>
<artifactId>Special</artifactId>
<version>1.0</version>
</dependency>
</dependencies>`
我需要的目录结构是
A.jar(包含以下文件)
Math.jar
Special.jar
MainMethod.class
META-INF
用户只运行A.jar,所有依赖项都将包含在A.jar中。
我的其余部分是
<build>
<finalName>Workspace</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<!-- Run shade goal on package phase -->
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<!-- add Main-Class to manifest file -->
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>MainMethod</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<archive>
<manifest>
<mainClass>MainMethod</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>
答案 0 :(得分:-1)
Maven强烈主张这样一种理念,即应用程序的所有依赖项都应该存储在存储库中并从那里获取。因此,对文件依赖性的支持只是相当基础。实际上,您有两个选择
声明一个像这样的系统依赖:
<dependency>
<groupId>Math</groupId>
<artifactId>Math</artifactId>
<scope>system</scope>
<systemPath>path/to/math.jar</systemPath>
</dependency>
我认为这应该可以在不指定版本的情况下工作。请注意,Maven人已弃用系统依赖项。因此,这不是一个面向未来的解决方案。
另一个选择是使用以下命令将jar安装到本地Maven存储库中:
mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -Dfile=Math.jar -DgroupId=math -DartifactId=math -Dversion=1.0 -Dpackaging=jar -DgeneratePom=true
这将使用本地存储库中提供的坐标注册给定的jar,以便您可以像在pom中一样引用它:
<dependency>
<groupId>Math</groupId>
<artifactId>Math</artifactId>
<version>1.0</version>
</dependency>
我认为这两种解决方案比实际解决方案更像是一种解决方法。作为长期解决方案,我建议您使用Maven构建依赖关系。如果您更愿意继续直接依赖文件,我建议切换到ant或Gradle,因为这些构建工具将文件依赖性视为比Maven更多地声明依赖关系的合法方式。
jar-in-jar通常被称为胖罐或超级罐。对我来说,maven-shade-plugin的声明看起来还不错。而且我认为它应该给你你的东西(我假设mainMethod
是包含你的public static void main(String[] args)
方法的类,你没有任何包。)