Java 有没有办法将mywebapp-1.0-SNAPSHOT-classes.jar从maven war插件中的attachClasses配置更改为mywebapp-1.0-SNAPSHOT.jar?
根据, 如果无法将类移动到另一个项目,则可以使用以下配置将webapp中包含的类和资源作为“附加”工件和分类器进行部署:Java 有没有办法将mywebapp-1.0-SNAPSHOT-classes.jar从maven war插件中的attachClasses配置更改为mywebapp-1.0-SNAPSHOT.jar?,java,maven,jakarta-ee,jar,war,Java,Maven,Jakarta Ee,Jar,War,根据, 如果无法将类移动到另一个项目,则可以使用以下配置将webapp中包含的类和资源作为“附加”工件和分类器进行部署: protected static File getTargetFile( File basedir, String finalName, String classifier, String type ) { if ( classifier == null ) { classifier = "";
protected static File getTargetFile( File basedir, String finalName, String classifier, String type )
{
if ( classifier == null )
{
classifier = "";
}
else if ( classifier.trim().length() > 0 && !classifier.startsWith( "-" ) )
{
classifier = "-" + classifier;
}
return new File( basedir, finalName + classifier + "." + type );
}
...
. 但我很想知道上述问题。最接近您想要做的事情是使用
作为
...
mywebapp
1.0-快照
...
maven战争插件
2.3
真的
某些分类器
...
但是这种方法总是将分类器设置为your_jar-classifier.jar
,如果您创建并清空或隔开标记,它将默认为-classes
另一方面,通过使用archiveclass
而不是attachClasses
,您将在war的WEB-INF\lib
中找到您想要的JAR(没有分类器),但是不会生成WEB-INF\classes
。尝试使用以下
部分配置您的WEB应用程序的pom.xml
,以查看它是否适合您的需要:
...
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>create-jar</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>attach-jar</id>
<phase>package</phase>
<goals>
<goal>attach-artifact</goal>
</goals>
<configuration>
<artifacts>
<artifact>
<file>${project.build.directory}/${project.build.finalName}.jar</file>
</artifact>
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
。。。
maven jar插件
创建罐子
包裹
罐子
org.codehaus.mojo
构建助手maven插件
装罐
包裹
附加工件
${project.build.directory}/${project.build.finalName}.jar
...
本节要求Maven显式创建一个jar
,然后将创建的jar
附加到构建中,以便安装
阶段可以将生成的工件复制到本地存储库中。简短回答:否,您不能
通过查看(第292行)中的maven war插件源代码,您可以看到,仅通过修改maven war插件配置无法满足您的需求:
protected static File getTargetFile( File basedir, String finalName, String classifier, String type )
{
if ( classifier == null )
{
classifier = "";
}
else if ( classifier.trim().length() > 0 && !classifier.startsWith( "-" ) )
{
classifier = "-" + classifier;
}
return new File( basedir, finalName + classifier + "." + type );
}
由于默认情况下,classesClassifier
参数是“classes”
,因此您没有机会修改此行为:classifier
永远不会为null
您可以在生成文件后重命名该文件,或者修改maven war插件的源代码,并将其用作自定义插件
最后,不建议使用空classesClassifier:这可能会产生误导。我不知道你的项目要求,虽然
希望能有所帮助。
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<archiveClasses>true</archiveClasses>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>attach-jar</id>
<phase>package</phase>
<goals>
<goal>attach-artifact</goal>
</goals>
<configuration>
<artifacts>
<artifact>
<file>${project.build.directory}/${project.build.finalName}/WEB-INF/lib/${project.build.finalName}.jar</file>
</artifact>
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
org.apache.maven.plugins
)导致在WAR文件中生成所需的JAR,附加工件目标将该文件提取为工件。Maven的一般原理是一个POM生成一个工件。这意味着从项目中取出Jar的最干净、最“专业”的方法是将Java代码和Webapp项分成两个模块,由父项目分组在一起
因此,潜在的项目层次结构可能是:
mywebapp-parent/ -> Contains all dependency info, project version
mywebapp/ -> Creates Jar
mywebapp-web/ -> Depends on mywebapp, Creates War
为什么要将war类型打包到jar文件中?这听起来有点奇怪?我想要战争,也想要罐子。我知道,从同一个pom.xml中,不应该同时生成war和jar,但我被要求这样做。我一直在关注:Hi@ritesh,你是否检查了我在回答中输入的XML,只是为了知道它为什么不能满足你的需要?谢谢嗨@Guillaume Darmont:我问了一个关于maven war插件的非常具体的问题。我已经创建了war和jar,如更新部分所述。我非常感谢所有的答复,并对所有答复投了赞成票。希望我已经回答了你的问题这两种情况都不是我的要求:)我想要相同名称的war和jar。请附上与上述代码对应的类的链接/名称。谢谢回复:)
mywebapp-parent/ -> Contains all dependency info, project version
mywebapp/ -> Creates Jar
mywebapp-web/ -> Depends on mywebapp, Creates War