只有一个 JAR Maven Archetype 文件,如何生成新项目?
Having only a JAR Maven Archetype file, how can it be generated a new project?
我刚开始为 IntelliJ 中的 Scala 项目使用 Maven 3。
我已经按照 this 指南生成了一个 JAR 文件。
我将 archetype.jar 移动到我要创建新项目的目录。但我的问题是:
- 这个文件是独立的吗?够了吗?它不适用于命令 "mvn archetype:generate"
- 是否可以在没有任何存储库干预的情况下使用jar文件?所以我可以和同事们分享。
- 最好的方法是什么,我一直在研究,所有指南仅基于存储库而不是本地工作。即使是本地存储库也只包含带有 id 而不是内容的 xmls 文件。
你问的是一个复杂的问题...我将尝试总结一下我所知道的,让我们看看它是否有帮助。
您问题的答案:
1) 如果在生成 archtype 等之后只有基本的 Maven 项目结构,如果 运行 maven clean install 并且项目生成了一个 jar,理论上应该可以立即执行从命令行和独立。
但是,当您向小型项目添加依赖项时,并非所有依赖项都会自动构建到独立 jar 中,有时您必须告诉 maven 将它们捆绑到其中。
Maven Shade 插件 - 将所有需要的依赖项添加到您的 jar
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>MainApp</mainClass>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
</transformers>
<shadedArtifactAttached>true</shadedArtifactAttached>
<shadedClassifierName>launcher</shadedClassifierName>
</configuration>
</plugin>
</plugins>
</build>
2) 您不需要集成到任何存储库,建议将其用于更广泛的项目,以便您可以将工件发布到您公司的 Repo,以便于开发人员之间使用
3) 最简单的方法是在 Intellij 本身中创建一个新项目,将 Maven 指定为项目类型,这将为您提供默认的项目结构。然后在 pom 文件中指定我在上面粘贴的构建块,你基本上可以开始了......如果你还需要依赖项 运行 你自己的代码,你需要将它们添加到依赖项块中。
于是,我终于在生成之前使用了如下命令:
mvn install:install-file -Dfile=<path-to-jar-archetype-file> -DgroupId=<groupId> -DartifactId=<artifactId> -Dversion=<version> -Dpackaging=jar
执行该命令后,jar 将安装到您的本地存储库中。您可以使用例如 IntelliJ 生成项目或转到要生成项目的路径并...
mvn archetype:generate
我刚开始为 IntelliJ 中的 Scala 项目使用 Maven 3。
我已经按照 this 指南生成了一个 JAR 文件。
我将 archetype.jar 移动到我要创建新项目的目录。但我的问题是:
- 这个文件是独立的吗?够了吗?它不适用于命令 "mvn archetype:generate"
- 是否可以在没有任何存储库干预的情况下使用jar文件?所以我可以和同事们分享。
- 最好的方法是什么,我一直在研究,所有指南仅基于存储库而不是本地工作。即使是本地存储库也只包含带有 id 而不是内容的 xmls 文件。
你问的是一个复杂的问题...我将尝试总结一下我所知道的,让我们看看它是否有帮助。
您问题的答案:
1) 如果在生成 archtype 等之后只有基本的 Maven 项目结构,如果 运行 maven clean install 并且项目生成了一个 jar,理论上应该可以立即执行从命令行和独立。
但是,当您向小型项目添加依赖项时,并非所有依赖项都会自动构建到独立 jar 中,有时您必须告诉 maven 将它们捆绑到其中。
Maven Shade 插件 - 将所有需要的依赖项添加到您的 jar
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>MainApp</mainClass>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
</transformers>
<shadedArtifactAttached>true</shadedArtifactAttached>
<shadedClassifierName>launcher</shadedClassifierName>
</configuration>
</plugin>
</plugins>
</build>
2) 您不需要集成到任何存储库,建议将其用于更广泛的项目,以便您可以将工件发布到您公司的 Repo,以便于开发人员之间使用
3) 最简单的方法是在 Intellij 本身中创建一个新项目,将 Maven 指定为项目类型,这将为您提供默认的项目结构。然后在 pom 文件中指定我在上面粘贴的构建块,你基本上可以开始了......如果你还需要依赖项 运行 你自己的代码,你需要将它们添加到依赖项块中。
于是,我终于在生成之前使用了如下命令:
mvn install:install-file -Dfile=<path-to-jar-archetype-file> -DgroupId=<groupId> -DartifactId=<artifactId> -Dversion=<version> -Dpackaging=jar
执行该命令后,jar 将安装到您的本地存储库中。您可以使用例如 IntelliJ 生成项目或转到要生成项目的路径并...
mvn archetype:generate