Java 有没有办法将mywebapp-1.0-SNAPSHOT-classes.jar从maven war插件中的attachClasses配置更改为mywebapp-1.0-SNAPSHOT.jar?

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 = "";

根据,

如果无法将类移动到另一个项目,则可以使用以下配置将webapp中包含的类和资源作为“附加”工件和分类器进行部署:

    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