这篇文章是关于自己发布GlassFish 4.0快照的,其中包括一些黑客。 我找到了GlassFish FullBuild的官方说明,然后决定自己构建服务器。 有时,您可能不想等待团队升级GlassFish构建文件。 在本条目中,我将Artifactory称为私有Maven存储库,当然,您也可以使用其他东西。 从Subversion自己签出GlassFish 4.0的源代码:
svn checkout https://svn.java.net/svn/glassfish~svn/trunk/main glassfish-main
您需要修改工作站的Maven设置文件以排除Eclipse工件。这是我配置的settings.xml
的示例。
<settings xmlns='http://maven.apache.org/SETTINGS/1.0.0'xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'xsi:schemaLocation='http://maven.apache.org/SETTINGS/1.0.0http://maven.apache.org/xsd/settings-1.0.0.xsd'><!--Maven http://maven.apache.org/settings.html --><localRepository/><interactiveMode/><usePluginRegistry/><offline/><pluginGroups/><servers><server><id>ACME-ARTIFACTORY-PRIVATE</id><username>administrator</username><password>password</password></server></servers><mirrors><mirror><id>maven-central</id><url>http://repo1.maven.org/maven2/</url><mirrorOf>central,!eclipselink.repository</mirrorOf></mirror></mirrors><proxies/><profiles/><activeProfiles/>
</settings>
在编译整个GlassFish代码之前,我们需要破解POM文件,以便它们将工件安装到我们的专用Artifactory服务器中,而不是Maven Central中。 将以下节添加到分发中的POM文件中:
<distributionManagement><repository><id>ACME-ARTIFACTORY-PRIVATE</id><name>acme-releases</name><url>http://peabody.internal.acme.com/artifactory/ACME-ARTIFACTORY-PRIVATE</url></repository><snapshotRepository><id>ACME-ARTIFACTORY-PRIVATE</id><name>acme-snapshots</name><url>http://peabody.internal.acme.com/artifactory/ACME-ARTIFACTORY-PRIVATE</url></snapshotRepository></distributionManagement>
在上面的节中,将ACME的定义编辑到您私有的Artifactory服务器,然后将其复制以下POM文件:
-
main/pom.xml
-
main/appserver/javaee-api/pom.xml
-
main/appserver/pom.xml
-
main/nuclues/pom.xml
这是一个讨厌的黑客,因为我不喜欢您无法设置从配置更改部署服务器和凭据。 其他源代码允许通过Maven配置文件甚至属性文件配置部署服务器。 确保您的Maven设置适用于Artifactory部署,并且我们还设置了Maven构建过程。 设置环境变量MAVEN_OPTS,以使Maven有足够的内存,并且永久生成足够高,以避免编译期间出现内存不足异常。
MAVEN_OPTS=-Xmx1024m -Xms256m -XX:MaxPermSize=512m -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled
如果您有16GB RAM工作站,为什么不将其最大化以编译整个GlassFish? 垃圾收集算法更改为并发标记和清除算法,并且我们还将启用的类卸载设置为启用。 您准备好进行编译,输入以下命令:
cd glassfish-main
svn update
mvn clean
mvn install -DskipTests=true
在像样的Intel Core i5 / i7机器(2012)上,让自己成为大约20分钟的热饮料和小吃。 休息一下。 请注意,我们在这里避免运行单元测试,而跳过了测试,因为我们只想快速地在仓库中发布工作版本,但这并不是说测试很糟糕。 成功编译所有模块之后,现在您可以部署到私有Maven存储库。 如果遵循先前的说明(关于将节复制到单个POM文件),则可以从根目录执行此命令。
cd glassfish-main
mvn deploy -DskipTests=true
将工件部署到Artifactory之后,检查快照4.0版本的存储库,它们都应该存在。 现在下降到Java EE项目文件夹。 破解POM文件glassfish-main/appserver/javaee-api/javax.javaee-api/pom.xml
。 它在build部分中缺少maven源插件,因此,默认情况下,它不会生成源JAR,这对于查看新的JavaEE 7 API很有用! 查找XPath project/build/plugins
然后将以下节附加到该POM。
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><executions><execution><id>attach-sources</id><phase>package</phase><goals><goal>jar-no-fork</goal></goals></execution></executions></plugin>
执行以下命令行,以部署Java EE api工件
cd glassfish-main/appserver/javaee
mvn deploy -DskipTests=true
由于某种原因,主要执行不会自动安装javax.javaee-api
工件。 执行此行将为三个基础模块生成JAR和SOURCES JAR: javax.javaee-api
, javax.javaee-web-api
和javax.javaee-endorsed-api
。 转至Artifactory,查看工件已全部部署。 然后,您可以像这样编写Gradle构建文件:
repositories {maven {credentials {username 'administrator'password 'passowrd'}url 'http://peabody.internal.acme.com/artifactory/ACME-ARTIFACTORY-PRIVATE'}maven {url 'https://maven.java.net/content/groups/promoted'}maven {url 'http://repository.jboss.org/nexus/content/groups/public'}
}dependencies {providedCompile 'org.glassfish.main.extras:glassfish-embedded-all:4.0-SNAPSHOT'providedCompile 'javax:javaee-api:7.0-bpeter-private'providedCompile 'javax:javaee-web-api:7.0-bpeter-private'compile 'org.glassfish.main.extras:glassfish-embedded-all:4.0-SNAPSHOT'compile 'javax:javaee-api:7.0-bpeter-private'testCompile 'junit:junit:4.10'
}
特别是,请注意,构建版本注释为7.0-bpeter-private
。 我尚未解决的难题的最后一部分是如何配置build.id
Maven属性,以便我可以自定义内部版本号。 仍然是一个谜。 如果您碰巧知道答案,请给我响铃。 干杯!
参考:在Peter Pilgrim的博客博客中,我们的JCG合作伙伴 Peter Pilgrim 自己构建了GlassFish 4.0快照 。
翻译自: https://www.javacodegeeks.com/2013/03/build-glassfish-4-0-snapshots-yourself.html